SOLID
로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
- SRP: 단일 책임 원칙 (single responsibility principle)
- OCP: 개방 - 폐쇄 원칙 (Open/closed principle)
- LSP: 리스코프 치환 원칙(Liskov substitution principle)
- ISP: 인터페이스 분리 원칙 (Interface segregation principle)
- DIP: 의존관계 역전 원칙 (Dependency inversion principle)
여러 디자인 패턴(Design Pattern)들이 SOLID 설계 원칙에 입각해서 만들어진 것이기 때문에, 잘 알아둬야 할 필요가 있다.
SRP 단일 책임 원칙
Single responsibility principle
- 한 클래스는 하나의 책임만 가져야 한다.
- 코드에 변경이 발생하였을 때 파급이 적을수록 단일 책임을 잘 따랐다.
- 책임의 범위를 적절하게 조절하는 것이 중요하다.
- 프로그램의 유지보수성을 높이기 위한 설계 기법이다.
- 변경 발생 시 한 개의 클래스, 혹은 하나의 지점만 고칠 수 있어야 한다.
OCP 개방-폐쇄 원칙
Open/closed principle
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 새로운 변경 사항이 발생했을 때 유연하게 코드를 추가함으로써 애플리케이션의 기능을 확장할 수 있음
- 새로운 변경 사항이 발생했을 때 객체를 직접적으로 수정하는 것을 제한함.
- 객체 지향 프로그래밍의 장점과 다형성을 활용하는 설계 원칙이다.
- 인터페이스를 통해 역할과 구현의 분리를 한다.
LSP 리스코프 치환 원칙
Liskov substitution principle
- 하위 타입은 언제나 부모타입으로 교체할 수 있어야 한다.
- 다형성에서 하위 클래스는 인터페이스 규약을 지켜야 한다.
- 다형성 원리를 이용하기 위한 원칙으로 인터페이스를 구현한 구현체를 믿고 사용하려면 이 원칙이 필요하다.
- 다형성 이용을 위해 부모 타입으로 메서드를 실행해도 의도대로 실행되도록 구성을 해줘야 한다.
ISP 인터페이스 분리 원칙
Interface segregation principle
- 인터페이스를 사용에 맞게 분리하여야 한다.
- 클라이언트를 기준으로 분리함으로, 목적과 용도에 적합한 인터페이스 만을 제공한다.
- 이를 통해 인터페이스의 변경이 클라이언트에 주는 영향을 최소화한다.
DIP 의존관계 역전 원칙
Dependency inversion principle
- 클래스를 참조해서 사용해야 한다면, 직접 참조가 아닌 그 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조하라.
- 구현 클래스에 의존하지 말고, 인터페이스에 의존하라.
- 구현체에 의존할 시 변경이 어려워져 유연하지 못하다.
Reference