너에겐 ŁĦㄱr 없는거㉡l? 그런 거니?

객체지향 설계의 SOLID 원칙

2021年02月28日

로버트 마틴에 따르면, 객체지향이란 핵심 의존성들을 역전시킴으로써 경직된 코드나 취약한 코드 및 재사용이 불가능 코드가 되지 않게 하는 식으로 의존체들을 관리하는 일이라고 말한다.

경직성: 프로그램의 한 부분을 변경하면 다른 부분까지 변경해야 하는 경우

취약성: 관련이 없는 곳에서 오류가 발생하는 경우

부동성: 코드를 원래 맥락에서 벗어나 재사용할 수 없는 경우

이러한 문제들을 해결하고 목표를 달성하기 위해 SOLID가 도입되었다.

SRP: 단일 책임 원칙

OCP: 개방/폐쇄 원칙

LSP: 리스코프 대체 원칙

ISP: 인터페이스 분리 원칙

DIP: 의존성 역전 원칙

1. SRP: 단일 책임 원칙

클래스를 변경한 이유가 단일해야 한다.

2. OCP: 개방/폐쇄 원칙

클래스를 수정하지 않고 클래스의 행위를 확장할 수 있어야 한다.

3. LSP: 리스코프 대체 원칙

부모 클래스의 인스턴스를 해당 자식 클래스 중 하나의 인스턴스로 교체할 수 있게 설계해야 한다. 부모 클래스가 무언가를 할 수 있다면 자식 클래스도 그것을 할 수 있어야 한다.

4. IPS: 인터페이스 분리 원칙

몇 개의 큰 인터페이스가 있는 편 보다는 작은 인터페이스가 많은 편이 바람직하다.

5. DIP: 의존성 역전 원칙

코드가 추상화에 의존해야 한다고 명시하고 있다.

  • 의존성 역전: 의존체들을 역전시키는 원칙
  • 의존성 주입: 의존체들을 역전시키는 행위
  • 생성자 주입: 생성자를 통해 의존성 주입을 수행
  • 파라미터 주입: 세터와 같은 메서드의 파라미터를 통해 의존성 주입을 수행

의존성 역전의 목표는 구상적인 것에 결합하기보다는 추상적인 것에 결합하는 것이다.

같은 맥락에서 의존성 역전 원칙의 목표 중 하나는 컴파일타임이 아니라 런타임에 객체를 선택하는 것이다.