Skip to content

Latest commit

 

History

History
58 lines (33 loc) · 2.98 KB

객체지향 설계 5원칙-SOLID.md

File metadata and controls

58 lines (33 loc) · 2.98 KB

들어가기 전에

이번 글에서는 객체지향 5원칙-SOLID에 대해서 알아보겠습니다. 그 전에 먼저 결합도와 응집도에 대해서 간단하게 알아보겠습니다.

좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높이는 것이 바람직하다.
결합도는 모듈간의 상호 의존 정도로서 결합도가 낮으면 모듈 간의 상호 의존성이 줄어들어 객체의 재사용성이나 수정, 유지보수가 용이하다.
응집도는 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로, 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이하다.


객체지향 5원칙-SOLID

1. SRP - 단일 책임 원칙

어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.


2. OCP - 개방 폐쇄 원칙

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

자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.


3. LSP - 리스코프 치환 원칙

서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.

  • 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.
  • 구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스 할 수 있어야 한다.

즉, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.


4. ISP - 인터페이스 분리 원칙

클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안 된다.

  • 상위 클래스는 풍성할수록 좋고, 인터페이스는 작을 수록 좋다.

  • 상위 클래스는 하위 클래스에게 자신의 기능을 확장해주기 때문에, 하위 클래스 입장에선 많은 기능이 확장되면 될 수록 좋을 거 같다.

  • 인터페이스는 하위 클래스에게 어떠한 기능을 필수록 구현시키는 것이기 때문에, 하위 클래스에서 많은 기능을 오버라이딩 해야 하고 그러다보면 SOLID 원칙에 위배될 거 같다.


5. DIP - 의존 역전 원칙

  1. 고차원 모듈은 저차원 모듈에 의존하면 안 된다.
  2. 이 두 모듈 모두 추상화된 것에 의존해야 한다.
  3. 추상화된 것은 구체적인 것에 의존하면 안 된다
  4. 구체적인 것이 추상화된 것에 의존해야 한다.
  5. 자주 변경되는 구체 클래스에 의존하지 마라

자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.