220203_스프링입문_디자인패턴_전략 패턴_패스트캠퍼스 챌린지 11일차
<2022년 02월 03일 _ 패스트캠퍼스 챌린지 11일차>
[스프링입문_디자인패턴_전략 패턴]
1. Strategy Pattern 전략 패턴
: 객체지향의 꽃
: 유사한 행위들을 캡슐화
: 객체의 행위를 바꾸고 싶은 경우, 직접 변경하는 것이 아닌 전략만 변경해 유연하게 확장하는 패턴
: SOLID중에서 개방폐쇄원칙(OCP)과 의존역전원칙(DIP)를 따름
: 전략 메서드를 가진 전략 객체 (Normal Strategy, Base64 Strategy)
: 전략 객체를 사용하는 컨텍스트(Encoder)
: 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트
2. 실습
(1) design 패키지에 strategy 패키지 추가 & EncodingStrategy 인터페이스 추가
(2) 이러한 전략을 사용하는 NormalStrategy, Base64Strategy 클래스 추가
package com.company.design.strategy;
public class NormalStrategy implements EncodingStrategy{
//Normal은 그대로 text return
@Override
public String encode(String text) {
return text;
}
}
package com.company.design.strategy;
import java.util.Base64;
public class Base64Strategy implements EncodingStrategy{
//text를 인코딩하여 return
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
(3) 전략들을 선택할 Encoder class 추가
package com.company.design.strategy;
public class Encoder {
//그때 그때마다 전략을 주입 받음
private EncodingStrategy encodingStrategy;
//각각의 전략에 따라서 결과가 달라질 수 있음
public String getMessage(String message){
return this.encodingStrategy.encode(message);
}
public void setEncodingStrategy(EncodingStrategy encodingStrategy){
this.encodingStrategy = encodingStrategy;
}
}
(5) Main문 작성
package com.company.design;
import com.company.design.strategy.Base64Strategy;
import com.company.design.strategy.Encoder;
import com.company.design.strategy.EncodingStrategy;
import com.company.design.strategy.NormalStrategy;
public class Main {
public static void main(String[] args) {
Encoder encoder = new Encoder();
//base64
EncodingStrategy base64 = new Base64Strategy();
//normal
EncodingStrategy normal = new NormalStrategy();
String message = "hello java";
//encoder 객체 자체는 변화하지 않고 전략에만 변화를 줘서 실행할 수 있다
encoder.setEncodingStrategy(base64);
String base64Result = encoder.getMessage(message);
System.out.println(base64Result);
encoder.setEncodingStrategy(normal);
String normalResult = encoder.getMessage(message);
System.out.println(normalResult);
}
}
결과: Base64와 Normal에 대한 결과를 차례로 볼 수 있다
(6) AppendStrategy 클래스 추가
package com.company.design.strategy;
public class AppendStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return "ABCD" + text;
}
}
(8) Main문 내용 추가
package com.company.design;
import com.company.design.strategy.*;
public class Main {
public static void main(String[] args) {
Encoder encoder = new Encoder();
//base64
EncodingStrategy base64 = new Base64Strategy();
//normal
EncodingStrategy normal = new NormalStrategy();
String message = "hello java";
//encoder 객체 자체는 변화하지 않고 전략에만 변화를 줘서 실행할 수 있다
encoder.setEncodingStrategy(base64);
String base64Result = encoder.getMessage(message);
System.out.println(base64Result);
encoder.setEncodingStrategy(normal);
String normalResult = encoder.getMessage(message);
System.out.println(normalResult);
//AppendStrategy 클래스 추가
encoder.setEncodingStrategy(new AppendStrategy());
String appendResult = encoder.getMessage(message);
System.out.println(appendResult);
}
}
결론:
ABCD가 Append 된 결과 또한 얻을 수 있음
정리: 전략의 수정을 통해 실제 사용하는 객체는 그대로 두고, 전략만 수정해서 다른 결과를 얻어낼 수 있다
(1) 전략 메서드를 가진 전략객체 (Normal Strategy, Base64Strategy, AppendStrategy 등)
(2) 전략 객체를 사용하는 컨텍스트 (Encoder)
(3) 전탹 객체를 생성해 컨텍스트에 주입하는 클라이언트
[디자인패턴] 알고 있을수록 유연하고 확장성 많은 디자인 설계를 할 수 있다!
11일차 강의 완료~
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'개발새발 > Spring' 카테고리의 다른 글
220205_스프링입문_웹 개발 개론_REST API_패스트캠퍼스 챌린지 13일차 (0) | 2022.02.05 |
---|---|
220204_스프링입문_웹 개발 개론_웹 개발이란_패스트캠퍼스 챌린지 12일차 (0) | 2022.02.04 |
220202_스프링입문_디자인패턴_파사드 패턴_패스트캠퍼스 챌린지 10일차 (0) | 2022.02.02 |
220201_스프링입문_디자인패턴_옵저버 패턴_패스트캠퍼스 챌린지 09일차 (0) | 2022.02.01 |
220131_스프링입문_디자인패턴_데코레이터패턴_패스트캠퍼스 챌린지 08일차 (0) | 2022.01.31 |