객체지향 설계의 SOLID 원칙
2021年02月28日
로버트 마틴에 따르면, 객체지향이란 핵심 의존성들을 역전시킴으로써 경직된 코드나 취약한 코드 및 재사용이 불가능 코드가 되지 않게 하는 식으로 의존체들을 관리하는 일이라고 말한다.
경직성: 프로그램의 한 부분을 변경하면 다른 부분까지 변경해야 하는 경우
취약성: 관련이 없는 곳에서 오류가 발생하는 경우
부동성: 코드를 원래 맥락에서 벗어나 재사용할 수 없는 경우
이러한 문제들을 해결하고 목표를 달성하기 위해 SOLID가 도입되었다.
SRP: 단일 책임 원칙
OCP: 개방/폐쇄 원칙
LSP: 리스코프 대체 원칙
ISP: 인터페이스 분리 원칙
DIP: 의존성 역전 원칙
1. SRP: 단일 책임 원칙
클래스를 변경한 이유가 단일해야 한다.
2. OCP: 개방/폐쇄 원칙
클래스를 수정하지 않고 클래스의 행위를 확장할 수 있어야 한다.
3. LSP: 리스코프 대체 원칙
부모 클래스의 인스턴스를 해당 자식 클래스 중 하나의 인스턴스로 교체할 수 있게 설계해야 한다. 부모 클래스가 무언가를 할 수 있다면 자식 클래스도 그것을 할 수 있어야 한다.
4. IPS: 인터페이스 분리 원칙
몇 개의 큰 인터페이스가 있는 편 보다는 작은 인터페이스가 많은 편이 바람직하다.
5. DIP: 의존성 역전 원칙
코드가 추상화에 의존해야 한다고 명시하고 있다.
- 의존성 역전: 의존체들을 역전시키는 원칙
- 의존성 주입: 의존체들을 역전시키는 행위
- 생성자 주입: 생성자를 통해 의존성 주입을 수행
- 파라미터 주입: 세터와 같은 메서드의 파라미터를 통해 의존성 주입을 수행
의존성 역전의 목표는 구상적인 것에 결합하기보다는 추상적인 것에 결합하는 것이다.
같은 맥락에서 의존성 역전 원칙의 목표 중 하나는 컴파일타임이 아니라 런타임에 객체를 선택하는 것이다.