static method를 사용하여 객체를 생성하는 방식
☒ 팩토리 매서드 패턴은 디자인 패턴중 하나로 서로 다른 개념이다.
interface
내 static 매서드
, default 매서드
사용이 가능해진 배경
public class Client{
public static void main(String[] args){
WebClient webclient = WebClient.create();
}
}
WebClient
를 탐구하기로 결심했고 아래와 같은 코드를 마주쳤다. public interface WebClient{
static WebClient create() {
return new DefaultWebClientBuilder().build();
}
static WebClient create(String baseUrl) {
return new DefaultWebClientBuilder().baseUrl(baseUrl).build();
}
}
public interface OrderService{
...
}
public class OrderServiceImpl implements OrderService{
@Override
...
}
---
public class OrderConfig{
public OrderService orderService(){
return orderServiceImpl();
}
}
Service
추상화가 적용됐음에도 OrderServiceImpl
대신 다른 구현체를 사용하고자 한다면OrderConfig
클래스 수정이 불가피하다.
public interface OrderService{
static OrderService create(){
return new OrderServiceImpl();
}
}
class OrderServiceImpl implements OrderService{
@Override
...
}
---
public class OrderConfig{
public OrderService orderService(){
return OrderService.create();
}
}
client 코드 수정 없이
OrderService
를 구현하는 새로운 클래스
OrderService
내 create()
매서드 수정
위 두 작업만으로 서비스 확장을 할 수 있다.
client 코드 수정에는 닫혀있고, 확장에는 열려있는 개발이 가능해진다.