SRP: 단일 책임 원칙(single responsibility principle)
변경이 있을때 파급이 적으면 잘 따른 것
OCP: 개방-폐쇄 원칙 (Open/closed principle)
확장에는 열려 있으나 변경에는 닫혀있어야 한다.
다형성.
사실 상 변경을 안하기는 힘들고, 대신 이 역할의 해주는, 일종의 motherboard 라고 생각하면 됨. 스프링 컨테이너가 이 역할을 해줌.
LSP: 리스코프 치환 원칙 (Liskov substitution principle)
똑같은 규약을 지켜야 함.
예를 들어, 엑셀을 밟으면 앞으로 가게끔 설계한 인터페이스의 함수는, 무한히 구현 하더라도 그 방향을 따라야 함.
뒤로 가게 하거나 다른 뜬금없는 기능을 넣으면 안됨.
ISP: 인터페이스 분리 원칙 (Interface segregation principle)
예를들면, 자동차 인터페이스에 정비 인터페이스, 운전 인터페이스 다 집어넣는게 아니라
둘 인터페이스를 나눠서 만드는 거임.
이렇게 하면 어느 한 쪽이 변해도 영향을 미치지 않음.
서로 영향을 미치지 않게끔 잘 나누는 게 핵심인 듯.
인터페이스가 명확해지고, 대체 가능성이 높아짐.
DIP: 의존관계 역전 원칙 (Dependency inversion principle)
운전자는 자동차의 역할에 대해서만 알면 안다. 엑셀을 누르면, 앞으로 가고 등
예를 들면 K3, 아반떼 여러 종류의 자동차가 있는데 운전자가 K3에 대해 자세히, 아반떼에 대해 자세히 몰라야 한다.
즉, 역할(인터페이스)끼리 알아야지 구현(클래스 내부가 어떻게 구현되어 있는지)에 대해 알면 안된다.
인터페이스 끼리의 상호관계에 대해서만 잘 알고, 그게 어떻게 구현되어있는지는 몰라야 한다.
즉, findByName이라는 어떤 한 인터페이스의 함수는 String name을 주면 Member객체를 준 다는 것만 알면 된다. 인터페이스 끼리는.
블랙박스
추상화(인터페이스)끼리의 관계에 의존해야지 구체화에 의존하면 안된다.
'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글
10강. 주문할인정책 구현 (0) | 2023.07.16 |
---|---|
6강. 회원 도메인 설계 (0) | 2023.07.13 |
5강. 프로젝트 시작 (0) | 2023.07.13 |
2강. 좋은 객체지향 프로그래밍이란? (0) | 2023.07.12 |
1. 스프링 핵심 컨셉, 방향성 (0) | 2023.07.12 |