객체 지향 설계(OOD : Object Oriented Design)의 5개 원칙 SOLID는 아래 5가지 원칙의 앞 머리 알파벳을 따서 부르는 이름입니다.

  • SRP(Single Responsibility Principle) : 단일 책임 원칙
  • OCP(Open Closed Principle) : 개방 폐쇄 원칙
  • LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
  • ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
  • DIP (Dependency Inversion Principle) : 의존 역전 원칙

 

SRP(Single Responsibility Principle) : 단일 책임 원칙

어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
- 로버트 C. 마틴 -

 

남자 클래스와 의존 관계에 있는 다른 클래스들

 

남자 클래스에 단일 책임 원칙을 적용해 여러 개의 클래스로 분리

 

 

OCP(Open Closed Principle) : 개방 폐쇄 원칙

소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만
변경에 대해서는 닫혀 있어야 한다.
- 로버트 C. 마틴-

 

개방 폐쇄 원칙에 위배되는 경우

 

개방 폐쇄 원칙을 적용한 경우

 

개방 폐쇄 원칙을 적용한 예시 : JDBC

 

 

LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다. 하위 클래스의 인스턴스는 상위형 개체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.
- 로버트 C. 마틴 -

 

리스코프 치환 위반 원칙 사례 : 계층도/조직도

 

리스코프 치환 원칙 적용 사례 : 분류도

 

 

ISP (Interface Segregation Principle) : 인터페이스 분리 원칙

클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
- 로버트 C. 마틴 -

 

다양한 책임을 가진 남자 클래스

 

단일 책임 원칙을 적용해 남자 클래스를 단일 책임을 가진 여러 클래스로 분리

 

인터페이스 분할 원칙을 적용한 남자 클래스

 

 

DIP (Dependency Inversion Principle) : 의존 역전 원칙

"고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다."
"추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다."
"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"
- 로버트 C. 마틴 -

 

 

의존 역전 원칙 적용 전 (자주 사용되는 구체 클래스에 의존)

 

의존 역전 원칙 적용 후

 



AND