-
Factory Pattern within SpringJAVA/Spring 2020. 7. 18. 02:12반응형
스프링에서 팩토리 패턴을 사용하기 좋은 방법을 발견해서 기록해둔다.
한번 봐보자. DI와 팩토리의 만남. 기가막힌다.
인터페이스 정의
먼저 인터페이스를 하나 만들어 보자.
뭐가 좋을까?
간단하게 자동차로 해보자.public interface Car { Color getColor(); }
그냥 색깔만 보여준다.
이제 색깔별 차들을 구현해보자.
색깔별 자동차 클래스 구현
@Component public class RedCar implements Car { @Override public Color getColor() { return Color.RED; } }
빨간차...
@Component public class BlackCar implements Car { @Override public Color getColor() { return Color.BLACK; } }
까만차...
@Component public class BlueCar implements Car { @Override public Color getColor() { return Color.BLUE; } }
파란 차!
아! 컬러가 없구나. 컬러
enum
을 구현해보자.
Enum: Color
@RequiredArgsConstructor @Getter public enum Color { RED("Red"), BLUE("Blue"), BLACK("Black"); private final String name; }
getter
랑constructor
구현하기 귀찮은데 우리의lombok
씨가 정말 편하게 생성해준다.아무튼, 그렇고 이제 대망의 팩토리 클래스를 만들어보자.
두둥! 스프링에서 DI 기법을 활용한 팩토리!
@Component @RequiredArgsConstructor public class CarFactory { private final List<Car> carList; public Car getCar(Color color) { return carList.stream() .filter(car -> car.getColor().equals(color)) .findFirst() .orElseThrow(() -> new IllegalArgumentException("Color not found")); } }
두둥! 끝났다.
요 클래스는 빈으로 정의가 되어 있으므로 스프링에서
List<Car>
타입에 알맞는 클래스들을 가져다가 쏙쏙 넣어준다.
우리는 그냥 요 쏙쏙 들어온 리스트들 중 필요한 객체만 쏙쏙 뽑아서 쓰면 끝이다.@RestController @RequiredArgsConstructor public class Controller { private final CarFactory factory; ...() { factory.getCar(Color.RED); // << 짠 요롷게 쓰자 } }
간단하게 예제를 만들려다 보니 허접해진 것 같은 기분이다.
아무튼 스프링은 참 편리하구나.
반응형'JAVA > Spring' 카테고리의 다른 글
PK가 없는 테이블을 JPA 엔티티로 만들기 (0) 2021.12.07