[객체 지향] SOLID 법칙 - 객체 지향 설계 5대 원리

728x90
반응형
SMALL

 

# SOLID

로브터 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 5대 기본 원칙이다.

 

 


 

## SRP

Single Responsibility Principle : 단일 책임의 원칙

  • 작성된 클래스는 하나의 기능만 가지며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중해야 한다.
  • 즉, 어떤 변화에 의해 클래스를 변경하는 이유는 오직 하나뿐이어야 한다.
  • SRP 원리를 적용하면 책임 영역이 확실해지기 때문에, 다른 책임 변경 시 발생하는 사이드 이팩트로부터 자유로울 수 있다.
  • 또한, 책임을 적절히 분배함으로써 코드의 가독성과 유지보수에도 효과적이다.

 


 


 

## OCP

Open Close Principle : 개방 폐쇄의 원칙

  • 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려 있고, 변경에는 닫혀있어야 한다.
  • 변경을 위한 비용을 가능한 줄이고, 확장을 위한 비용은 가능한 극대화 해야 한다.
  • 즉, 요구 사항의 변경이나 추가 사항이 발생하더라도, 기존 구성 요소의 변경은 일어나지 않아야 하고
  • 기존 구성 요소를 쉽게 확장하여 재사용할 수 있어야 한다.

 



 

## LSP

The Liskov Substitution Principle : 리스코프 치환의 원칙

  • 하위 타입은 언제나 상위 타입으로 교체할 수 있어야 한다.
  • 즉, 해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도,
  • 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다.
  • 구현 상속(extends), 인터페이스 상속(implements)은 궁극적으로 다형성을 통한 확장성 획득을 목표로 한다.
  • LSP 역시 서브 클래스가 확장에 대한 인터페이스를 준수해야 함을 의미한다.

 



 

## ISP

Interface Segregation Principle : 인터페이스 분리의 원칙

  • 객체가 충분히 높은 응집도의 작은 단위로 설계됐더라도, 목적과 관심이 다른 클라이언트가 있다면 인터페이스를 통해 분리해야 한다.
  • 즉, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는 것이다.
  • SRP가 클래스 분리를 통해 변화에 대한 적응성을 획득한다면, ISP는 인터페이스 분리를 통해 변화에 대한 적응성을 획득한다.

 



## DIP

Dependency Inversion Principle : 의존성 역전의 원칙

  • 고수준 모듈(변화가 없는 추상화된 클래스 또는 인터페이스)은 저수준 모듈(변화기 쉬운 클래스)의 구현에 의존해서는 안 된다.
  • 반대로 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
  • 즉, 추상화에는 의존하되, 구체화에는 의존하지 않는 설계이다.

 

 


참고

  • www.nextree.co.kr/p6960
728x90
반응형
LIST