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
이 코드로 이해가 안갈경우 더 자세한 방법은 2에 만들어보았다.
728x90
반응형
'✨ Java > 디자인 패턴(Design pattern)' 카테고리의 다른 글
자바(JAVA) - 전략 패턴(Strategy Pattern) - 2 (1) | 2023.08.20 |
---|---|
자바(JAVA) - 팩토리 패턴(Factory) (0) | 2023.08.20 |
자바(JAVA) - 템플릿 메소드 패턴(Template Method Pattern) (0) | 2023.07.26 |
자바(JAVA) - 싱글톤 패턴(Singleton) (0) | 2023.07.13 |
댓글