강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

화이팅하실게요님의 프로필 이미지
화이팅하실게요

작성한 질문수

토비의 스프링 6 - 이해와 원리

스프링이 제공하는 템플릿

템플릿 콜백 패턴 관련하여 궁금한 것이 있습니다!

작성

·

13

0

안녕하세요 토비님! 좋은 강의 잘 듣고있습니다.

 

강의해주신 템플릿 콜백 + 전략 패턴을 보고 궁금한게 있어서 질문 드립니다.

 

현재는 config로 구현체의 빈을 직접 주입했지만, 데이터에 따라 동적으로 구현체를 선택해야할 때는 토비님은 어떤 방법을 주로 이용하시나요?

답변 2

0

토비님의 프로필 이미지
토비
지식공유자

어떤 오브젝트가 의존(사용)하는 오브젝트를 동적으로 결정한다는 것은 우선 코드 레벨에서 의존 관계가 고정되어 있지 않다는 의미입니다. 일단 애플리케이션이 시작한 뒤에 @Configuration 클래스 등에서 프로퍼티나 다른 조건을 가지고 의존성을 주입해주는 경우도 동적이라고 볼 수 있습니다. 당연히 코드는 인터페이스에만 의존해야겠죠. 이런 경우는 어셈블러라고도 불리는 이런 빈 구성정보를 담은 다른 코드에 의해서 의존 관계가 결정됩니다. 프로퍼티나 심지어 이 시점에 DB를 액세스해서 어떤 빈을 사용할지 결정할 수도 있겠죠.

여기서 한단계 더 들어가면 전형적인 전략 패턴 스타일로 의존 오브젝트가 결정될 수도 있습니다. 예를 들어 사용자의 요청마다 어떤 조건을 보고 이미 준비되어있는 여러 같은 타입의 오브젝트 중에서 하나를 선택하는 것이죠. 템플릿-콜백 패턴에서 콜백의 경우 아예 매번 new로 생성되어 전달되기도 합니다. 이때는 이것도 동적인 방식이겠죠.

또 다른 방법으로는 미리 준비해둔 여러가지 빈 중에서 원하는 것을 선택해서 사용하는 방법이 있습니다. 이게 전략 패턴에 가장 가까운 방식인데요. 알고리즘을 교체해서 사용하거나, 정책 등을 바꾸는 경우에 이 방식을 많이 씁니다.

이때는 해당 알고리즘을 담은 인터페이스를 구현한 스프링 빈이 여러개가 될 수도 있습니다. 이를 사용하는 서비스 빈 같은 데서 하나만 주입을 받을 수는 없으니 이 때는 List나 Map 등으로 모든 빈을 컬렉션으로 받아둘 수 있습니다. 그리고 데이터나 코드의 로직에 의해서 이 중에서 적절한 것을 선택해서 직접 호출하거나 콜백 형태로 템플릿에 주입해주기도 합니다. Map으로 하면 key를 잘 세팅해서 한번에 원하는 오브젝트를 찾을 수도 있고요. List라면 매번 어떤 조건에 해당하는 빈을 찾는 로직을 한번 더 거쳐야 할 겁니다.

데이터를 기준으로 선택한다면 Map으로 가지고 있는 빈 들의 key에 해당하는 값을 데이터로부터 만들 수 있으면 가장 편리합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 화이팅하실게요님!

스프링에서 템플릿 콜백 패턴과 전략 패턴을 조합하여 사용하는 것은 유연하고 확장 가능한 애플리케이션을 설계하는 데 유용한 방법입니다. 템플릿 메서드를 활용하여 공통 로직을 캡슐화하고, 전략 패턴을 통해 동적으로 전략을 변경하는 방식이죠.

데이터에 따라 동적으로 구현체를 선택해야 한다면, 몇 가지 방법을 고려할 수 있습니다:

  1. 팩토리 패턴 사용: 필요한 클래스의 인스턴스를 반환하는 팩토리 메서드를 사용하여 데이터에 따라 적절한 구현체를 반환할 수 있습니다. 이는 코드의 복잡성을 줄이고, 변경에 유연하게 대처할 수 있게 합니다.

  2. @Qualifier와 @Primary 사용: 여러 빈이 존재할 때, 특정 구현체를 지정하기 위해 @Qualifier 어노테이션을 사용할 수 있습니다. 런타임에 특정 조건에 맞게 선택할 수 있도록 설정할 수 있습니다.

  3. 전략을 활성화하거나 비활성화하는 로직: Spring Expression Language(SpEL) 또는 다른 조건 구문을 사용하여 필요에 따라 전략을 활성화하거나 비활성화하는 방법입니다. 이 방법은 다소 복잡할 수 있으므로 신중히 사용하는 것이 좋습니다.

강의 중에서도 다양한 디자인 패턴과 스프링의 DI 기능을 어떻게 활용할지에 대한 깊이 있는 내용이 다뤄질 것입니다. 추가적으로 토비님의 강의에서 제공되는 예제 코드를 참고하면서 나만의 방법을 찾아보시면 좋을 것 같습니다.

아래는 관련된 질문과 답변 링크 일부입니다. 유사한 주제로 다른 회원들의 질문을 보는 것도 큰 도움이 될 것입니다:
- 템플릿 콜백 패턴 관련 구현 질문
- 전략 패턴과 스프링 DI 연계

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

화이팅하실게요님의 프로필 이미지
화이팅하실게요

작성한 질문수

질문하기