좋은 객체 지향 설계의 5가지 원칙
Single Responsibiity Principle
Open/Closed Principle
public class MemberService { // MemberRepository m = new MemoryMemberRepository(); // 기존 코드 MemberRepository m = new JdbcMemberRepository(); // 변경 코드 }
- (문제점) 다형성을 사용했지만 OCP를 지킬 수 없다.
- (해결책) 별도의 조립을 하는 설정자가 필요 -> Spring Container
Liskov Substitution Principle
Ex) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능
--> 뒤로 가게 구현하면 LSP 위반.
Interface Segregation Principle
Dependency Inversion Principle
추상화 의존 (O)
, 구체화 의존 (X)
의존한다?
그 코드에 대해 하는 것.
public class MemberService { // MemberRepository m = new MemoryMemberRepository(); // 기존 코드 MemberRepository m = new JdbcMemberRepository(); // 변경 코드 }
기존 코드에서 MemberService는 MemberRepository만 알고 있는 것이 아니라, MemoryMemberRepository도 알고 있음.
이러면 구체화에 의존함. 역할에 의존하는 것이 아님.
DIP 위반
Spring
객체 지향 설계와 Spring
다형성 + OCP, DIP
가 가능하도록 지원한다.