구체적인 객체의 생성 과정을 팩토리로 모듈화하여 구체적인 부분이 아닌 추상적인 부분에
의존할 수 있도록 하여 기존 코드를 수정하지 않고 새로운 인스턴스를 다른 방법으로
생성하도록 확장할 수 있다.
확장에는 열려 있으며 변경에는 닫혀있는 OCP 개방폐쇄원칙을 적용한 패턴.
자바 8버전 전에는 인터페이스의 기본 메소드를 만드려면 추상 클래스를 만들어 인터페이스의 추상 메소드를 구현한 뒤 실제 인터페이스 구현체가 추상 클래스를 상속받아 사용해야 하는 번거러움이 있었다.
하지만 자바 8의 default 메소드로 인해 인터페이스 내에서 기본 메소드를 정의 할 수 있게 되었다.
public interface ShipFactory {
default Ship orderShip(String name, String email) {
validate(name, email);
prepareFor(name);
Ship ship = createShip();
sendEmailTo(email, ship);
return ship;
}
}
인터페이스내의 private 메소드를 만들 수 있게 되어
default 메소드 구현시 읽기 좋은 코드로 구현할 수 있게 되었다.