객체 지향 소프트웨어를 견고하고 확장 가능하게 설계하기 위한 5가지 기본 원칙
Robert C.Martin에 의해 명명됨
S
RP : 단일 책임 원칙
O
CP : 개방-폐쇄 원칙
L
SP : 리스코프 치환 원칙
I
SP : 인터페이스 분리 원칙
D
IP : 의존성 역전 원칙
코드의 확장, 유지 보수 관리 용이
불필요한 복잡성 제거
생산성을 높힘
디자인 패턴들이 SOLID 설계 원칙에 입각
SRP : Single Responsibility Principle
모든 클래스는 단 하나의 책임(Responsibility)만 가져야 한다.
책임(Responsibility) : 해야하는 것 or 할 수 있는 것 (기능)
책임 분리 : 하나의 클래스는 하나의 책임(기능)만 담당
변경의 영향을 최소화
예측하지 못한 변경사항이 발생 → 유연하고 확장성 있게 구조 설계
하나의 클래스에 여러 책임(강한 결합) → 변경에 취약(수정 많이해야함)
OCP : Open-closed Principle
확장에는 열려있어야 하며, 수정에는 닫혀있어야 한다.
확장에 열림 → 코드를 유연하게 확장할 수 있어야함 (변경에 유연)
수정에 닫힘 → 이때 기존의 코드에는 수정이 없어야 함
추상화를 통해 상속, 다형성 구조를 마련하면 만족
변하는 것, 변하지 않는 것을 명확히 구분
변하는 것 : 쉽게 변화해야 함
변하지않는 것 : 변하는 것에 영향을 받지않아야 함
추상클래스 + 상속 사용
LSP : Liskov Substitution Principle
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
자식 클래스가 부모 클래스의 행동 규약을 지켜야함
다형성에 관련된 원칙
오버라이딩을 잘해야됨, 부모의 의도와 문법 맞춰서 구성
잘못된 상속 구조 → 협력시 상호 신뢰를 잃게 됨
ISP : Interface Segregation Principle
클라이언트가 사용하지않는 메소드에 의존하지 않아야 한다.
인터페이스에 클라이언트가 필요한 메소드만 포함될 수 있도록 분리
인터페이스를 각각 사용에 맞게 분리하여 인터페이스의 단일 책임 강조
$$ \downarrow $$
SRP : 클래스의 단일 책임 강조 (클래스 분리)