티스토리 뷰

DesignPattern

[Design Pattern] Strategy Pattern

tbMaster 2022. 3. 11. 01:15
반응형

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

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함