본문 바로가기

디자인패턴

SOLID 원칙

객체지향 프로그래밍에서 유지보수와 확장이 쉬운 프로그램을 만들고자 할때 SOLID라는 5가지 기본 원칙을 활용할 수 있다. 기존 소스코드들을 리펙터링할 때에도 적용할 수 있는 규칙이 될 것이다.

 

  • SRP : Solid Responsibility Principle
  • OCP : Open Closed Principle
  • LSP : Liskov Substitution Principle
  • ISP : Interface Segregation Principle
  • DIP : Dependendy Inversion Principle

 

SRP

하나의 클래스는 단 하나의 책임만을 가져야 한다.

 

! 하나의 클래스의 여러개의 책임이 주어진다면?

          프로그램의 요건이 추가 되거나 변경될 때, 클래스도 변경되어야하는 경우가 많아지게 되며

          결합도가 높은 코드가 될 확률이 높다.

     

! 하나의 책임이 여러 클래스에 주어진다면?

          프로그램에 변경 사항이 생겼을 때, 여러개의 클래스를 수정해주어야한다.

          이때, 빠지는 부분 없이 모든 곳을 찾아야 하는 어려움이 생기게 된다.

          로그를 찍거나, 보안 관련 코드들은 한 곳에 모아 응집도를 높일 필요가 있다.

 

 

OCP 

확장에는 열려있고, 변경에는 닫혀있어야한다.

즉, 기존 코드는 변경하지 않으면서(closed) 프로그램을 확장할수 있어야(open) 한다.

인터페이스를 활용하여 구체적인 클래스들을 캡슐화하는 작업이 필요하다.

 

 

LSP 

부모 클래스를 자식 클래스로 대체 가능해야한다.

자식 클래스는 최소한 부모 클래스가 할 수 있는 행위는 수행이 가능해야한다.

가장 간단한 방법은 재정의를 하지 않는 것. (피터 코드의 상속 규칙)

 

ISP

클라이언트 관점에서, 이용하지 않는 기능에는 영향을 받지 않아야 한다.

즉, 공용 인터페이스를 사용하는 대신 각 클라이언트에 특화되도록 인터페이스를 분리를 시킨다.

 

 

DIP

변화가 거의 없는 클래스에 의존해야한다. 

구체적인 클래스가 아닌 인터페이스, 추상 클래스 등 추상화에 의존을 해야한다.