1. SRP : 단일 책임 원칙 (Single responsibility principle)
- 한 클래스는 하나의 책임만을 가져야 한다.
2. OCP : 개방/폐쇄 원칙 (Open/closed principle)
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 다형성을 사용해도 OCP를 위배하고 마는데 어떻게? -> AppConfig로 해결했으나 비효율적 -> 이를 해결하기 위해 스프링 등장
3. LSP : 리스코프 치환 원칙 (Liskov substitution principle)
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위 한 원칙, 인터페이스를 구현한 구현체는 믿고 사용하려면, 이 원칙이 필요하다.
- 프로그램의 정확성?
-> ex : 자동차 인터페이스의 goForward() 는 앞으로 나아가는 기능을 해야한다. 나아가는 방식이 다르더라도 반드시 '앞으로' 나아가야 한다
4. ISP : 인터페이스 분리 원칙 (Interface segregation principle)
- 범용 인터페이스 하나보다는 여러 개의 인터페이스로 분리하는 것이 낫다.
- ex : 자동차 인터페이스 하나보다는 운전 인터페이스, 정비 인터페이스 둘로 나누는 것이 낫다.
5. DIP : 의존관계 역전 원칙 (Dependency inversion principle)
- 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙 을 따르는 방법 중 하나다.
- 구현 클래스에 의존하지 말고 인터페이스에 의존하도록 해야한다는 말
- ex : 아반떼에 의존하는 것이 아니라 자동차에 의존해야한다.
- OCP와 마찬가지로 다형성을 사용해도 DIP를 위배하게 된다. -> AppConfig로 해결했으나 비효율적 -> 스프링으로 해결
'김영한님 스프링 강의 정리 > 핵심원리 기본편' 카테고리의 다른 글
컴포넌트 스캔 - @Component, @Autowired, @Qualifier (0) | 2021.01.09 |
---|---|
@Configuration과 싱글톤 패턴 (0) | 2021.01.08 |
싱글톤 컨테이너 (0) | 2021.01.08 |
컨테이너에 등록된 Bean 모두 조회 (0) | 2021.01.07 |
AppConfig의 Spring 스타일 사용 (0) | 2021.01.07 |