미션 1 : 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.
https://github.com/Ryan-Dia/readable-code/tree/main/src/main/java/cleancode/day04
미션 2: SOLID에 대하여 자기만의 언어로 정리해 봅시다.
1. 단일 책임 원칙 (Single Responsibility Principle)
하나의 클래스나 모듈은 오직 하나의 책임만 가져야 합니다.
- 코드를 작성할 때 각 클래스가 명확한 역할을 갖도록 하는 것이 중요하다고 느낍니다. 이렇게 하면 유지보수가 쉬워지고, 수정해야 할 때 영향을 최소화할 수 있습니다.
2. 개방-폐쇄 원칙 (Open/Closed Principle)
소프트웨어 요소는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다.
- 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 확장할 수 있다면 개발 과정이 훨씬 수월해집니다. 이를 위해 인터페이스나 추상 클래스를 활용하면 더 좋을 것 같습니다.
3. 리스코프 치환 원칙 (Liskov Substitution Principle)
자식 클래스는 부모 클래스로 대체되어도 시스템의 정확성이 유지되어야 합니다.
- 상속 관계를 맺을 때 항상 부모 클래스의 계약을 지켜야 한다는 것을 의미합니다. 이를 통해 코드의 일관성을 유지할 수 있다고 생각합니다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle)
클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다.
- 거대한 인터페이스 하나보다는 필요한 기능만 가진 작은 인터페이스 여러 개를 만드는 것이 효율적이라고 생각합니다. 이렇게 하면 불필요한 의존성을 줄일 수 있습니다.
5. 의존 역전 원칙 (Dependency Inversion Principle)
상위 모듈은 하위 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 합니다.
- 구체적인 구현보다 추상화된 인터페이스에 의존함으로써 시스템의 유연성과 확장성을 높일 수 있다고 믿습니다. 이는 의존성 주입과 같은 디자인 패턴과도 밀접한 관련이 있습니다.