해결된 질문
작성
·
198
1
웹서핑 공부중에 어디선가 ActionEnum 의 다양한 예시를 보고 따라서도 적용도 해보고 했었는데요, 그러니까, Enum 내부에 인스턴스 생성코드가 있고, factory 메서드로 해당 타입이 반환되는 다음과 같은 형태 입니다.
public enum ActionEnum {
ACTION_1(SubAction1::new)
, ACTION_2(SubAction2::new)
;
private final Supplier<Action> instantiator;
ActionEnum(Supplier<Action> instantiator) {this.instantiator = instantiator;}
public Action newInstance() {
return instantiator.get();
}
}
이것이 사용되는 곳에서 좀.. 코드가 숨겨지는 효과가 있더라는, 추천하지않는 말을 들었는데요(숨겨지는 효과: 사용되는 곳에서 명확히 드러내지 않아 파악이 힘든 상태)
질문입니다.
Enum 응용패턴이 혹시 안티패턴 이라던지, 적절하지 못한 경우가 특별이 있는지,
사용에 있어 권장되거나 되지 않는 이유와 같은
ActionEnum 혹은 EnumFactory 에 대한 강사님의 견해가 궁금합니다.
읽어주셔서 감사합니다.
답변 1
0
보여주신 코드는 Enum 내부에 Supplier를 가지고 있고 그걸 통해 인스턴스를 생성하는 코드 같아 보이네요. 그럼 Action_1.newInstance()를 사용해서 매번 새로운 SubAction1의 인스턴스를 생성할텐데, 인스턴스 생성을 독특하게 하네요.
흠.. 그냥 필요할 때 마다 new SubAction1()을 호출하면 안될 이유가 있거나 해당 객체 생성은 꼭 Action_1이 해야만 하는 이유가 있나요? 그런게 아니라면 왜 저렇게 복잡하게 SubAction1의 인스턴스를 만들어야 하는지 저는 잘 모르겠습니다.
Truestar님은 이런 사용법을 적용하셨다고 하셨는데 어디에 어떻게 적용해서 어떤 효과를 누리고 계신가요?
답변감사드립니다^^
남겨주신 글에대해 이해한데로 말씀드려 볼께요.
아래 예시는 enum 과 분기적인 switch 문의 Action 타입 factory 메서드 코드입니다.
해당 객체 생성은 꼭 Action_1이 해야만 하는 이유가 있나요?
이유가 따로 있지는 않구요, 그저 단순하게 예외를 던질 필요가 없어지고,코드량이 줄어드는 것에 촛점을 맞추고 있었는데요,
createActionWithEnum(.) 코드가 혹시 가독성을 해지는 것이 아닐까 하고, 우려가 생겨 질문하게 되었습니다.
( 혼자 쓰기에는 좋아보입니다만 공용으로 사용이 가능할지.. )
토이프로젝트 에 사용하고 있었습니다.효과는 다형성의 여러 하위클래스를
어디선가 분기적으로 생성해야 될 필요가 있을텐데 이떄 길어지게 될
if 문이나, switch 문 분기로직을 간소화 할때 사용하면 되겠다고 생각했었어요.
Enum 활용이 참고된 포스트:
jojoldu 님의 enum 활용
Enum 활용사례 3가지 (tistory.com)
이외에도 Stackoverflow 에서 enum 관련글을 찾아 보았습니다.