Knowledge/이론

객체지향 설계 5대 원칙 (SOLID 원칙)

똑똑한망치 2024. 1. 17. 17:30
728x90
반응형

1. SOLID 원칙


SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙) 을 말한다. 앞자를 따서 SOLID 원칙 이라고 부른다.

 

 

 


 

 

 

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


  • 분류에 해당한다고 생각하면 된다.
  • 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화 해야 한다. 즉, 하나의 클래스는 하나의 기능을 담당하여 하나의 책임을 수행한다.
  • 만약 하나의 클래스에 기능(책임)이 여러개가 있다면 기능 변경(수정) 이 일어났을 때 수정해야할 코드가 많아진다. 예를 들어 A를 고쳤더니 B를 수정해야하고 또 C를 수정했더니 다시 A로 돌아가서 A를 수정해야하는 책임이 순환되는 형태가 되어버린다. 따라서 SRP 원칙을 따름으로써 한 책임의 변경으로부터 다른 책임의 변경으로의 연쇄작용을 극복할 수 있게 된다. 즉, 코드의 의존성과 결합도를 줄인다. 
  • 프로그램의 유지보수성을 높이기 위한 설계 기법이다.

 

 

 

 

 

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


  • '확장에는 열려있어야 하고, 수정에는 닫혀있어야 한다.' 를 의미한다.
  • 기능 추가 요청이 오면 클래스를 확장, 다른 클래스를 새로 생성 등을 통해 손쉽게 구현하며, 확장에 따른 클래스 수정을 거의 하지 않도록 프로그램을 작성하는 설계 기법이다.
  • 즉, 추상화 사용을 통한 관계 구축을 권장하는 의미이다.

 

 

 

 

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


  • LSP원칙은 서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙이다.
  • 쉽게 말해, 다형성 원리를 이용하기 위한 원칙 개념이다.
  • 다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면, 업캐스팅된 상태에서 부모의 메서드를 사용해도 동작이 의도대로 흘러가야 하는 것을 의미한다. 즉, 상속받은 클래스는 부모 클래스와 동일한 동작을 해야 재활용 가능성이 높아진다는 의미이다.

 

 

 

 

 

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


  • ISP원칙은 interface 도 단일 책임을 갖도록 각각 사용에 맞게 잘라 분리해야 한다는 원칙이다.
  • 너무 큰 인터페이스(여러 가지 기능이 통합되어 있는 인터페이스)를 만들면 상속받는 클래스에서 필요없는 메서드를 빈 메서드로 만드는 경우가 발생하기 때문에 필요한 기능만 구현하고 제공 가능하도록 인터페이스를 분리해야한다.
  • 즉, 클라이언트의 목적과 용도에 적합한 인터페이스만 제공하는 것이 목표이다.
  • SRP원칙은 클래스의 단일 책임을 강조하고, ISP는 인터페이스의 단일 책임을 강조한다.
  • 인터페이스는 한번 구성하였으면 왠만하면 수정을 하지 않는다.

 

 

 

 

 

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


  • DIP 원칙은 어떤 Class를 참조해서 사용해야 하는 상황이 생긴다면, 그 Class를 직접 참조하는 것이 아니라 그 대상의 상위 요소 (추상 클래스 or 인터페이스)로 참조하라는 원칙이다.
  • 즉, 구현된 클래스에 의존하지 않고 인터페이스에 의존하라는 의미이다.
  • DIP의 지향점은 각 클래스 간의 결합도를 낮추는 것이다.

 

반응형