728x90
728x90
전략 패턴 (Strategy pattern)
- 행위를 클래스로 캡슐화해서, 동적으로 행위를 자유롭게 변환할 수 있게 함
- '구조' 디자인 패턴
- Spring의 의존성 주입 (DI)을 전략 패턴을 이용해서 구현할 수 있음
절차
1. 인터페이스 선언
2. 선언한 인터페이스의 구현 클래스 생성
더보기
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 | // 구현 클래스 1 public class Base64Encoder implements IEncoder { @Override public String encode(String message) { // Base64 형식으로 인코딩한 후 반환하기 String resultEncode = Base64.getEncoder().encodeToString(message.getBytes()); return resultEncode; } } ------------------------------ // 구현 클래스 2 public class UrlEncoder implements IEncoder { @Override public String encode(String message) { // URL 방식으로 인코딩한 후 반환하기 try { return URLEncoder.encode(message, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } } } | cs |
3. 중간 클래스 생성
- 사용자는 중간 클래스만 알고 있으면 기능을 이용할 수 있음
(내부 알고리즘을 알지 못해도 됨)
더보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Encoder { // IEncoder의 구현 클래스들은 다형성을 통해 IEncoder 타입으로 바라볼 수 있음 private IEncoder iEncoder; // DI 의존 주입 설정 + 디자인 패턴 (전략 패턴) <- 중요 public Encoder(IEncoder iEncoder) { this.iEncoder = iEncoder; } // setter 메서드까지 만들어야 전략 패턴 완성 public void setiEncoder(IEncoder iEncoder) { this.iEncoder = iEncoder; } // 기능 // 변경할 메세지 public String encode(String message) { return iEncoder.encode(message); } } | cs |
4. Main에서 사용하기
더보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static void main(String[] args) { // 중간 클래스 만들어 둔 상태 String url = "www.naver.com/books?id=100"; // IEncoder 생성자 타입 -> 의존 주입받을 수 있도록 설계 // Base64Encoder <- IEncoder로 볼 수 있음 // UrlEncoder <- IEncoder로 볼 수 있음 // 하고 싶은 인코더 클래스를 주입(DI)만 하면 그 구현 클래스에 맞게 기능을 처리할 수 있음 Encoder encoder = new Encoder(new UrlEncoder()); String result1 = encoder.encode(url); System.out.println("result1 : " + result1); // setter 메서드를 활용해서, 우리가 사용하고 싶은 메서드를 전략적으로 선택해서 사용 가능 encoder.setiEncoder(new Base64Encoder()); System.out.println(encoder.encode("반가워")); } | cs |
320x100
반응형
'Java > Design Pattern' 카테고리의 다른 글
[Java] 옵저버 패턴 (Observer pattern) (0) | 2023.04.11 |
---|---|
[Java] 싱글톤 패턴 (Singleton pattern) (0) | 2023.04.10 |
[Java] 어댑터 패턴 (Adapter pattern) (0) | 2023.03.27 |
[Java] 디자인 패턴 정리 (0) | 2023.03.27 |
[Java] 빌더 패턴 (Builder pattern) (0) | 2023.03.23 |