좋은 객체 지향 설계의 5가지 원칙 (SOLID)

Garam·2024년 4월 9일
post-thumbnail

SOLID란?

클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것

  1. SRP: 단일 책임 원칙 (Single Responsibility Principle)
  • 한 클래스는 하나의 책임만 가져야 한다.
  • 하나의 책임이라는 것은 모호하다.
    - 클 수도 있고, 작을 수도 있다. (경험에 따라서도 다르다)
    - 문맥과 상황에 따라 다르다.
  • 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다.

  1. OCP: 개방-폐쇄 원칙 (Open/Closed Principle)
  • 가장 중요한 원칙이다.
  • 소프트웨어 요소에는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
  • 모순처럼 보일 수 있으나, 다형성을 잘 활용하자는 의미이다.
    - 인터페이스를 구현한 새로운 클래스를 하나 만들었다면, 기존 코드를 변경한 것일까?
  • 다형성을 적용한다고 해서 OCP 원칙을 엄격히 지킬수는 없다.
  • 따라서 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.

  1. LSP: 리스코프 치환 원칙 (Liskov Substitution Principle)
  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 컴파일 단계를 넘어 다형성에서 하위 클래스가 인터페이스 규약을 잘 지키고 기능적으로 신뢰성을 보장할 수 있는지에 대한 원칙이다.

  1. ISP: 인터페이스 분리 원칙 (Interface Segregation Principle)
  • 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다
  • 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

  1. DIP: 의존관계 역전 원칙 (Dependency Inversion Principle)
  • 구현된 클래스에 의존하는 것이 아닌 인터페이스에 의존
  • 역할에 의존해야 변경이 용이해지고, 구현체 그 자체에 의존하게 되면 변경이 어려워진다.
  • 예를 들면 배우가 상대 배우에만 맞춰서 연습한다면 상대 배우가 교체되었을 때 난처해질 수 있다. 그러나 대본에 의존해서 연습을 한다면 상대 배우가 누구든 간에 얼마든지 공연을 할 수 있다.


0개의 댓글