객체 지향 프로그래밍의 원칙 중 하나
기존 코드 수정 없이 새로운 기능을 추가할 수 있어야 한다는 의미로
캡슐화된 객체 간 메시지로만 소통하고 서로 영향을 주지 않아야 한다는 것 같다
결합도를 줄이고 응집도를 높이는..
객체에 직접 의존하지 않고 인터페이스에 의존하도록 코드를 작성하면
언제든지 구현을 통해 새로운 인스턴스를 추가, 사용할 수 있다
Car 인터페이스가 있다면
새로운 차종이 추가된다 하더라도 인터페이스를 사용하는
클라이언트 코드인 Driver 또한 Car 에 추가된 차종을 자유롭게 이용할 수 있다
Car 에 변경이 일어나더라도 클라이언트 코드인 Driver 는
수정 없이 Car 를 이용할 수 있다
다형성 활용과 역할/구현을 잘 분리한 코드는
새로운 기능을 추가하더라도 대부분의 핵심 코드는 그대로 유지할 수 있다
가장 중요한 패턴 중 하나로
알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다
Car 인터페이스가 전략을 정의하는 인터페이스가 되고
각 차량이 전략의 구체적인 구현이 된다
그리고 그 전략을 클라이언트의 코드 변경 없이 손 쉽게 교체할 수 있다
자바에서 이런 것들을 다 모두 가능하게 하는 것은
다형성이다
null 체크에 대한 로직을 객체로 만들어
조건문의 default 옵션에서 사용하도록 한다
null object 또한 해당 인터페이스를 implements 후
overide 후 default 옵션에서 null 클래스의 인스턴스를 반환하도록 구현