[Java] 전략 패턴 (Strategy pattern)

2023. 4. 11. 12:50·Java/Design Pattern
728x90
728x90

전략 패턴 (Strategy pattern)

  - 행위를 클래스로 캡슐화해서, 동적으로 행위를 자유롭게 변환할 수 있게 함

  - '구조' 디자인 패턴

  - Spring의 의존성 주입 (DI)을 전략 패턴을 이용해서 구현할 수 있음

 

 


절차

1. 인터페이스 선언

더보기
1
2
3
4
5
public interface IEncoder {
 
    String encode(String message);
    
}
cs

 

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;
        }
    }
 
}
Colored by Color Scripter
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);
    }
    
}
Colored by Color Scripter
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("반가워"));
    
}
Colored by Color Scripter
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
'Java/Design Pattern' 카테고리의 다른 글
  • [Java] 옵저버 패턴 (Observer pattern)
  • [Java] 싱글톤 패턴 (Singleton pattern)
  • [Java] 어댑터 패턴 (Adapter pattern)
  • [Java] 디자인 패턴 정리
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    SWAGGER
    zapier
    tailwindcss
    오블완
    Codeigniter
    cs
    C#
    java
    errorNote
    git
    Wordpress
    php
    티스토리챌린지
    vuejs
    js
    Android
    SpringBoot
    HTML
    Swing
    Hotkeys
    개발일지
    면접
    http
    jQuery
    jsp
    SQL
    SEO
    typeScript
    CSS
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java] 전략 패턴 (Strategy pattern)
상단으로

티스토리툴바