java

자바 객체 지향의 원리와 이해_Chapter05_객체 지향 설계 5원칙 - SOLID

강용민 2023. 3. 21. 21:17

도구를 올바르게 사용하는 법이 있는 것처럼 객체 지향의 특성을 올바르게 사용하는 방법, 즉 객체 지향 언어를 이용해 객체 지향 프로그램을 올바르게 설계해 나가는 방법이나 원칙이 존재할까?

SOLID 원칙이 바로 그것이다. SOLID는 아래 5가지 원칙의 앞 머리 알파벳을 따서 부르는 이름이다.

  • SRP(Single Responsibility Principle) : 단일 책임 원칙
    • 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
  • OCP(Open Closed Principle) : 개방 폐쇄 원칙
    • 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
      • 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
  • LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    • 서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다.
    • 하위 클래스의 인스턴스는 상위형 객체 잠조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.
    • 상속이라는 특성을 올바르게 활용하면 자연스럽게 얻게된다.
  • ISP(Inteface Segregation Principle) : 인터페이스 분리 원칙
    • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
    • 인터페이스를 통해 메서드를 외부에 제공할 때는 최소한의 메서드만 제공해야한다.(인터페이스 최소주의 원칙)
      • 인터페이스의 모든 메서드는 강제 구현을 해야하기 때문에 문제가 생길 수 있다.
  • DIP(Dependency Inversion Principle) : 의존 역전 원칙
    • 고차원 모듈은 저차원 모둘에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다.
    • 추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다.

이 원칙들은 응집도는 높이고, 결합도는 낮추는 고전 원칙을 객체 지향의 관점에서 재정립한 것이다. SOLID는 객체 지향 4대 특성을 발판으로 하고 있으며, 이어지는 Chpater6에서 소개할 디자인 패턴의 뼈대이며 스프링 프레임워크의 근간이기도 하다.