티스토리 뷰
Reference
패스트캠퍼스 "The Red: 25개 백엔드 개발 필수 현업 예제를 통해 마스터하는 JAVA STREAM"
모던 자바 인 액션 -전문가를 위한 자바 8,9,10 기법 가이드
Strategy Pattern (전략 패턴)
- 행동 패턴 중 하나
- 런타임에 어떤 전략(알고리즘)을 사용할 지 선택할 수 있게 해줌
- 전략들을 캡슐화하여 간단하게 교체할 수 있게 해줌
Strategy Pattern(전략 패턴) 구성
- 알고리즘을 나타내는 인터페이스(Strategy 인터페이스)
- 다양한 알고리즘을 나타내는 한 개 이상의 인터페이스 구현
- 전략 객체를 사용하는 한 개 이상의 클라이언트
Strategy 구현
[ EmailProvider.java ]
- 알고리즘을 나타내는 인터페이스
: 해당 인터페이스는 getEmail 메서드 하나만 가지고 있으며, getEmail 메서드는 알고리즘이 수행될 메서드를 나타낸 것이다.
[ MakeMoreFriendsEmailProvider.java, VerifyYourEmailAddressEmailProvider.java ]
- Strategy 인터페이스의 구현체
: 실제 동작할 알고리즘을 getEmail에 작성한다.
[ EmailSender.java ]
- 한 개 이상의 전략을 사용할 클라이언트
: 여러 전략 구현체들을 설정할 수 있도록 setter 메서드 제공 (setEmailProvider)
: 해당 전략을 사용할 메서드 제공 (sendEmail)
[ Main.java ]
동작과정을 보면...
1. 사용할 전략 구현체들을 생성한다.
2. 전략을 사용하는 클라이언트에서 원하는 기준에 따라 전략을 setter를 통해 변경한다.
( emailSender.setEmailProvider(...) )
3. 이후에는 클라이언트에서 동일한 동작을 호출하지만, 각 변경된 전략으로 서로 다른 알고리즘이 동작하도록 한다.
- emailSender.sendEmail 로 클라이언트(EmailSender)에서는 동일한 동작(sendEmail)을 호출
- emailSender.setEmailProvider(verifyYourEmailAddressEmailProvider) 로 설정하여 나온 결과와
- emailSender.setEmailProvider(makeMoreFriendsEmailProvider) 로 설정하여 나온 결과가 다름을 알 수 있다.
함수형 프로그래밍을 적용한 전략 패턴 사용방법
: 위와 같이 구현체를 따로 생성하지 않고, lambda 를 이용하여 strategy 구현체 만들 수 있다.
-> 이렇게 하면 strategy 전략을 사용하기 위한 불필요한 코드들이 줄어듦
※ 함수형 프로그래밍이 가능한 이유 : EmailProvider 가 하나의 메소드만을 가질 수 있기때문에 가능
전체 코드
↓
https://gitlab.com/mskim0ct/tutorial/-/tree/main/src/com/fastcampus/chapter10/strategy
src/com/fastcampus/chapter10/strategy · main · mskim / Tutorial
tutorial for study
gitlab.com
'DesignPattern' 카테고리의 다른 글
[ Design Pattern ] Decorator Pattern (0) | 2022.03.17 |
---|---|
[ Design Pattern ] Template Method Pattern (0) | 2022.03.11 |
[Design Pattern] Chain of Responsibility pattern (0) | 2022.03.09 |
[ 생성 패턴 ] Singleton 패턴 (0) | 2021.12.14 |
[디자인패턴-java] 디자인 패턴을 배우는 이유 (0) | 2021.12.12 |