SW 설계 - SOLID 원칙
객체지향의 SOLID 원칙
  • Backend

객체지향에는 4가지의 특징이 있다. 이를 외우기 쉽게 만든 5가지 법칙이 SOLID법칙이다.
어떤 단어의 약자인지, 어떤의미인지 정리해보고자 한다.

객체지향의 4가지 특징

  • 캡슐화
  • 상속 (확장)
  • 추상화 (모델링)
  • 다형성

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

하나의 속성은 하나의 의미만 가져야 한다. 변수, 함수이든 두 가지 이상의 의미로 사용되어서는 안된다.

모든 클래스는 단 하나만의 책임을 가진다. 다시 말하면 클래스를 수정하는 이유는 오직 하나여야한다는 의미이다.

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

모든 객체는 자신의 확장에만 열려있어야 하고, 주변의 환경 변화에는 닫혀있어야 한다. 대표적인 예로 ODBC가 있다.
ODBC는 데이터베이스가 무엇이든 Connection을 통일시켜줘서 사용자가 DBMS코드를 바꿀 필요가 없게 한다. 객체 지향에서 OCP를 무시한다면 가장 큰 장점인 유연성, 재사용성, 유지보수성을 가질 수 없다.

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

모든 객체는 프로그램의 정확성을 깨뜨리지 않고 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
하위 클래스 T는 상위클래스 S의 속성이 바뀌지 않고 항상 실행 되어야 한다.
다시말해 하위형의 규칙을 엄격하게 지켜야 한다. 상위형에서 정의되지 않은 기능을 하위형에서 하거나, 상위형이 가지지 않은 데이터 명세를 멋대로 가지고 있다면 문제가 된다.

  • 클래스인 경우, 하위 클래스는 상위 클래스의 한 종류여야 한다.
  • 인터페이스인 경우, 구현 클래스는 인터페이스의 규약을 지켜야 한다.

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

특정 클라이언트에 특화된 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
큰 덩어리의 인터페이스를 구체적이고 작은 단위로 분리해야 한다. 객체들이 인터페이스나 상위 클래스를 사용할 때, 본인이 사용하는 메서드만 적절하게 사용할 수 있으면 된다.

D : DIP (Dependency Inversion Principle, 의존 역전 규칙)

객체 사이에 서로 도움을 주고받으면 서로간 의존관계가 생기게 된다.
그럴 때는 변화하기 쉬운 쪽이 아니라, 변화하기 어려운 것 혹은 거의 변화가 없는 것에 의존을 해야 한다.
상위 수준 정책은 하위 수준 정책에 의존해서는 안된다.