-> 좋은 객체 지향 어플레케이션을 개발할 수 있게 도와주는 프레임워크라는 점
인터페이스
클래스
를 인스턴스한 객체
장점
역할과 구현으로 구분하면, 유연해지며 변경도 편리해짐
클라이언트는 대상의 역할(인터페이스
)만 알면된다
클라이언트는 구현 대상의 내부 구조를 몰라도 되며, 변경되어도 영향 받지 않음
클라이언트는 구현 대상 자체를 변경해도 영향 받지 않음
실세계의 역할과 구현을 다형성을 통해 객체 세상으로 가져올 수 있음
예시
운전자 - 자동차 (K3, 아반떼, 테슬라 모델3)
운전자는 자동차가 바뀌어도 운전하는 부분에서 전혀 지장이 없음
즉 클라이언트
에게 영향을 주지 않고 새로운 기능
을 제공한다
다형성의 본질
클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경 가능
한계
역할(인터페이스
) 자체가 변하면, 클라이언트와 서버 모두 큰 변경 발생
인터페이스를 안정적으로 잘 설계하는 것이 중요함
클린 코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
SRP
: 단일 책임 원칙 (Single responsibility principle)
*OCP
: 개방-폐쇄 원칙 (Open/closed principle)
확장에는 열려
있으나, 변경에는 닫혀
있어야 한다LSP
: 리스코프 치환 원칙 (Liskov substitution principle)
ISP
: 인터페이스 분리 원칙 (Interface segregation principle)
DIP
: 의존관계 역전 원칙 (Dependency inversion principle)
추상화
라는 비용이 발생구체 클래스
를 직접 사용하는 것이 좋음 (인터페이스 생성 X)