객체지향 설계원칙(SOLID)
- 단일 책임원칙(Single Responsibility Principle)
- 개방-폐쇄 원칙(Open/Closed Principle)
- 리스코프 치환 원칙(Liskov Subsititution Principle)
- 인터페이스 분리 원칙(Interface Segregation principle)
- 의존관계 역전 원칙(Dependency Inversion Principle)
DIP 의존 관계 역전 원칙
- 기존의 감자였던 내가 작성했던 프로그램은 실행하는 클라이언트 코드에서 구현 객체를 생성하고 제어했다.
MemberApp classMemberService memberService = new MemberServiceImpl(null);
OrderService orderService = new OrderServiceImpl(null,null);
- 나중에는 AppConfig라는 '관리자 클래스'를 만들고 이 관리자 클래스에서 구현체 생성과 의존관계를 제어했다. 따라서 이제 실행 코드에서는 메인 코드에서 구현체가 무엇인지 알 필요가 없어지고 자신의 실행만 맡아서 하면 된다.(SRP)
AppCongfig.classpublic MemberService memberService(){
return new MemberServiceImpl(
memberRepository()
);
}
MemberApp.classAppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();
- 이제는 프로그램 내부에서 하던 제어가 외부 관리자 클래스로 넘어갔기 때문에 이러한 현상을 제어의 역전 (Inversion of Control) 이라고 한다.
OCP 개방-페쇄 원칙
확장에는 열려있고 변경에는 닫혀 있어야 한다.
- 위의 방법대로 AppConfig를 사용하여 실행 영역과 구성 영역으로 나누게 되면 기능 확장 시, 구성 영역만 변경 (구현체만 갈아끼움,의존 관계 수정 등) 함으로써 실행 코드는 건드리지 않고 프로그램 기능 확장이 가능해진다.