본문 바로가기
✨ Java/디자인 패턴(Design pattern)

자바(JAVA) - 전략 패턴(Strategy Pattern)

by 환풍 2023. 7. 13.
728x90
반응형

 

 

 

전략 패턴

객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법.

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//공격 인터페이스
public interface Attack {
    void attack();
}
 
// 공격 인터페이스를 구현한 총으로 공격
public class Gun implements Attack{
 
    @Override
    public void attack() {
        // TODO Auto-generated method stub
        System.out.println("총으로 공격합니다.");
    }
}
 
// 공격 인터페이스를 구현한 칼로 공격
public class Sord implements Attack{
 
    @Override
    public void attack() {
        System.out.println("칼로 공격합니다.");
    }
}
 
// 공격할 캐릭터 객체에게 생성과 동시에 어떤 걸로 공격할지 설정 후 공격무기 메소드 만들기
public class Character {
 
    private Attack attack;
 
    public Character(Attack attack) {
        this.attack = attack;
    }
    
    public void attackHow() {
        attack.attack();
    }
    
    public void changeWeapon(Attack attack) {
        this.attack = attack;
    }
}
 
// 캐릭터 객체가 생성되면서 무기쥐어지고, 바꿀 수있게 설정.
public class Main {
 
    public static void main(String[] args) {
        
        Character c = new Character(new Gun());
        
        c.attackHow();
        
        c.changeWeapon(new Sord());
        c.attackHow();
        
        c.changeWeapon(new Gun());
        c.attackHow();
    }
}
 
cs

 

Character 클래스가 Attack 인터페이스를 통해 공격 전략을 갖고있고,

changeWeapon 메서드를 통해 동적으로 공격 방식을 변경할 수 있다.

 

전략패턴의 핵심

클라이언트(Character 클래스)와 전략(Attack 인터페이스와 이를 구현한 Gun, Sord 클래스)를 분리하여 클라이언트가 변경 없이도 새로운 전략을 추가하거나 교체할 수 있도록 하는 것이다.

 

장점

  • 기존 컨텍스트를 변경하지 않고, 새로운 전략을 도입함으로써 "개방-폐쇄 원칙"을 만족한다.
  • 유연성과 확장성이 증가
  • 재사용성 증가

개방-폐쇄 원칙(Open/Closed Principle, OCP)이란?

 - 확장에는 열려있고, 수정에는 닫혀야한다.

 

단점

  • 로직이 늘어날 때마다 구현체 클래스가 증가
  • 한번 조립하면 전략을 변경하기 힘듬

 

https://bright-landscape.tistory.com/326

 

자바(JAVA) - 전략 패턴(Strategy Pattern) - 2

자바(JAVA) - 전략 패턴(Strategy Pattern) 전략 패턴 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법. HTML 삽입 미

bright-landscape.tistory.com

이 코드로 이해가 안갈경우 더 자세한 방법은 2에 만들어보았다.

728x90
반응형

댓글