SOLID란 로버트 C. 마틴이 2000년대 초반 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙으로 제시한 것을 마이클 페더스가 두문자어로 소개한 것이다.
- SRP(Single Responsibility Principle): 단일 책임 원칙
- OCP(Open Closed Principle): 개방 폐쇄 원칙
- LSP(Liskov Substitution Principle): 리스코프 치환 원칙
- ISP(Interface Segregation Principle): 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle): 의존 역전 원칙
응집도는 높이고 (High Cohension), 결합도는 낮추라는(Loose Coupling) 고전원칙을 객체 지향의 관점에서 재정의한 것
- 결합도는 모듈(클래스) 간의 상호 의존 정도로서 결합도가 낮으면 모듈 간의 상호 의존성이 줄어들어 객체의 재사용이나 수정, 유지보수가 용이하다.
- 응집도는 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로, 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이하다.
SRP (Single Responsibility Principle) - 단일 책임 원칙
"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다" - 로버트 C. 마틴
OCP (Open Closed Principle) - 개방 폐쇄 원칙
"소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다." - 로버트 C. 마틴
"자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다."
LSP (Liskov Substitution Principle) - 리스코프 치환 원칙
"서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다." - 로버트 C. 마틴
상속은 조직도나 계층도가 아닌 분류도가 되어야 한다.
- 하위 클래스 is a kind of 상위 클래스 : 하위 분류는 상위 분류의 한 종류이다.
- 구현 클래스 is able to 인터페이스 : 구현 분류는 인터페이스 할 수 있어야 한다.
ISP (Interface Segregation Principle) - 인터페이스 분리 원칙
"클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다." - 로버트 C. 마틴
DIP (Dependency Inversion Principle) - 의존 역전 원칙
"추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다."
"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"
- 로버트 C. 마틴
OCP와 거의 비슷하다, 하나의 해결책을 찾으면 그 안에 여러 설계 원칙이 녹아있는 경우가 많다.
스노우 타이어가 무엇에도 의존하지 않는 클래스였는데, 추상적인 타이어 인터페이스에 의존하게 됐다.
의존의 방향이 역전된 것이다.
자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.
참고
스프링 입문을 위한 자바 객체 지향의 원리와 이해
'개발' 카테고리의 다른 글
대규모 서비스를 지탱하는 기술 1장 (0) | 2022.03.16 |
---|---|
객체지향의 사실과 오해 2장 요약 (0) | 2021.11.29 |
객체지향의 사실과 오해 1장 요약 (0) | 2021.11.29 |
GCP에 Signed Url로 이미지 업로드하기 (0) | 2021.11.29 |