해결된 질문
작성
·
686
·
수정됨
1
안녕하세요 호돌맨님 이번 강의 내용중 3번 enum
을 이용한 방식에 대한 궁금증이 생겨서 질문 드립니다.
제가 생각했을때 enum
방식은 제한적이라 실무에서는 자주 쓰이지 않을 것 같다는 의문이 생겼습니다.
제한적이라고 생각했던 부분은
reflection을 이용한 인스턴스 생성이므로 스프링이 제공해주는 AOP프록시나 DI의 혜택을 받을 수 없다.
입니다.
예시로 들어주신 AnimalSerivce의 구현 클래스들은 트랜잭션이나 기타 AOP기능을 하용하지 않고, 주입받아야 하는 의존성도 없어서 괜찮지만 만약 Controller -> Service
를 호출하는 동일한 구조로 호출 대상이 되는 Service가 AOP프록시나 DI등의 처리가 필요한 클래스라면 AOP미적용, 또는 newInstance()
호출 시 예외 발생등의 문제가 발생할 것으로 보입니다.
실제로 실무에서 변수값에 따라 서로 다른 클래스 컴포넌트를 호출해야하는 상황에서 enum
방식이 자주 쓰이나요??
답변 2
1
안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.
꼭 스프링을 가정할 필요는 없지만 말씀하신 내용이 맞습니다. 배치쪽은 newInstance를 통해서 한 적도 많이 있지만
웹 서비스 쪽 에서는 List<ComponentedInterface> 와 같이 인터페이스를 구현하는 클래스들을 주입받고 finder를 통해 호출하는 방식을 많이 쓰고 있습니다.
아래같은 경우에 썼습니다.
결제방식에 따라 금액계산 방식이 달라질때
결제사에 따라 수수료 등 정책을 다르게 적용 해야할때
인증 도메인 (게시글, 장바구니, 주문, 결제)에 따라서 요청 object가 요청자의 주인인지 판단할때
문자(알림톡) 전송시 전송 타입에 따라 서로 다른 메시지 템플릿을 적용 해야할때
기타 등등.. 누군가가 새로운 구현 내용을 추가/수정할때 뭔 짓을 할지 모르는 상황을 코드로서 표현해야할때, if문 쓰면 잠재적 멸망이 발생할 수 있을때.
그런데 당연하게도 제가 많이 쓴다고해서 업계에서도 많이 쓰는건 아니라 어떤지는 모르겠습니다.
개인적으로는 잘 쓰고 광명 찾은게 ㄹㅇ팩트긴합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
enum 방식은 상수를 정의하고 이를 변수처럼 사용하는 방식으로, 코드의 가독성이 높아지고 에러를 방지하는 효과가 있습니다. 하지만, reflection을 이용한 인스턴스 생성을 할때는 스프링의 DI같은 기능을 사용하지 못하기 때문에, 이 경우에는 일반 클래스를 사용하는 것이 더 적합할 수 있습니다.
실제로 변수값에 따라 서로 다른 클래스 컴포넌트를 호출해야하는 상황에서도 enum 방식이 자주 사용되기는 합니다. 예를 들면, REST API에서 HTTP 메소드를 정의할 때, enum 방식을 사용하는 경우가 있습니다. 또한, 각종 라이브러리나 프레임워크에서도 enum 방식을 사용하는 경우가 있습니다.
하지만, DI나 AOP같은 기능이 필요한 경우에는, enum 방식보다는 일반 클래스를 사용하는 것이 더 적합할 수 있습니다. 따라서, 상황에 따라서 적절한 방식을 선택하는 것이 중요합니다.
답변이 도움이 되었길 바랍니다. 감사합니다.
예시 환경이 웹 서비스 Controller -> Service호출 이여서 제가 너무 스프링 환경에서만 생각을 한 것같습니다.
좋은 강의와 친절한 답변 감사합니다.