ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Factory Pattern within Spring
    JAVA/Spring 2020. 7. 18. 02:12
    반응형

    출처: https://ko.m.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Factory_1.png

    스프링에서 팩토리 패턴을 사용하기 좋은 방법을 발견해서 기록해둔다.

    한번 봐보자. 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;
    }

    getterconstructor 구현하기 귀찮은데 우리의 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

    댓글

Designed by Tistory.