역할과 구현을 분리
- 역할과 구현으로 구분하면 유연해지며 변경도 편리해진다.
- 클리이언트는 대상의 역할 (인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
- 역할 => 인퍼테이스, 구현 => 인터페이스를 구현한 클래스 or 객체
좋은 객체지향 프로그래밍의 조건
- 유연하고 변경이 용이하다.
- 확장이 가능한 설계를 통해 만든다.
- 클라이언트에 영향을 주지 않는 변경이 가능하다.
- 인터페이스가 안정적으로 잘 설계되있어야 한다.
좋은 객체지향 프로그래밍의 5가지 원칙 (SOLID)
- SRP : 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야 한다.
- OCP : 개방-폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
- 코드를 변경하는 것이 아닌 인터페이스를 구현한 클래스를 새롭게 만든다.
- LSP : 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다.
- 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다.
- ISP : 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나 보다 낫다.
- 인터페이스가 명확해지고, 대체 가능성이 높아진다.
- DIP : 의존 관계 역전 원칙
- 구현한 클래스가 아닌, 인터페이스에 의존해야 된다.
- 역할에 의존해야 한다.