스프링/1. 스프링 핵심 원리

3강. 좋은 객체지향의 원칙 5가지, SOLID

sdafdq 2023. 7. 12. 22:25

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객체를 준 다는 것만 알면 된다. 인터페이스 끼리는.

블랙박스

 

 

추상화(인터페이스)끼리의 관계에 의존해야지 구체화에 의존하면 안된다.