SOLID 객체 지향 원칙
객체 지향 설계의 5가지 원칙
- SRP 단일 책임 원칙
- OCP 개방-폐쇄 원칙
- LSP 리스코프 치환 원칙
- ISP 인터페이스 분리 원칙
- DIP 의존 관계 역전 원칙
SRP 단일 책임 원칙
- 한 클래스는 하나의 책임만 가진다.
- 중요한 기준은 변경이다. 변경이 있을때 여러 코드를 헤집는다면 이 원칙을 지키지 않은것. 파급효과가 적으면 원칙을 잘 따른것.
책임의 범위를 잘 조절하는게 개발자의 역량 이 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해진다. 시스템이 커질수록 장점이 극대화됨.
OCP 개방-폐쇄 원칙(✨)
- 프로그램은 확장에 열려있으나 변경에는 닫혀있어야한다?
- 다형성을 활용해서 지킬 수 있다.
- 인터페이스를 기반으로 새로운 기능을 구현
구현 객체를 변경할때 클라이언트 코드를 고치지 않아야함. -> 객체를 생성하고 연관관계를 맺어주는 설정자가 필요.
확장: 요구사항 변경에 따른 기능을 확장하거나 추가할 수 있다. 수정: 기존의 코드를 건드리지 않고 확장을 할 수 있다.
LSP 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
- 컴파일의 단계를 단순히 말하는 것이 아닌, 인터페이스 규약을 지켜야한다는 의미. 구현체는 기능적으로 보장해야한다. 느리더라도 앞으로 갈 것
ISP 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 자동차 인터페이스를 여러개로 쪼갬 -> 운전, 정비 인터페이스로 분리
- 정비 인터페이스를 변경해도 운전 클라이언트에 영향을 주지 않음.
- 인터페이스가 명확해지고, 대체 가능성이 높아진다.
클라이언트의 목적과 용도에 맞는 인터페이스를 제공하는것. 기능을 구현할때 각 기능에 맞는 인터페이스를 만들어 제공함으로서 지킬 수 있겠다.
DIP 의존관계 역전 원칙
- 프로그래머는 추상화에 의존해야한다. 구체화 X (의존성 주입은 이 원칙을 따르는 방법)
- 구현 클래스보다 추상 인터페이스에 집중해야 한다는 뜻
- 역할에 의존해야 한다. 그래야 유지보수가 용의
비즈니스와 관련된 로직이 하위 세부 사항에 의존하지 않는 걸 의미.
결론
결과적으로 위 원칙에서 얘기하는 바는 추상화와 다형성을 추구하자는 말이다. 구체에 종속되지 말고 추상에 의존하여 객체지향적인 코딩을 하여야겠다.