언어/Java

Java(자바) 디자인패턴 - 전략(Strategy) 패턴 설명 및 예제소스

2018. 4. 18. 21:55
목차
  1. Java 관련 포스팅  :  Java 관련
  2. Java 전략(Strategy) Pattern - 구조 설명
  3. 아래와 다이어그램으로 나타낼 수 있으며, 세부 항목은 하단에서 설명합니다.전략패턴 구조(Structure) - Strategy(전략) : 전략 사용을 위한 인터페이스 생성- ImplementationOne, ImplementationTwo : Strategy 인터페이스를 구현한 실제 알고리즘을 구현- Context : 인스턴스를 주입받아 직접 사용하는 역할Java 전략(Strategy) Pattern - 예제 소스 코드


Java 디자인패턴 - 전략(Strategy) 패턴



오늘부터 Java 디자인 패턴을 예제와 함께 설명하는 포스팅을 하려고 합니다. 그 중에서 첫 번 째로 실무
프로젝트에서 가장 많이 사용하고 중요한 전략패턴을 설명하려고 합니다.

전략패턴은 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고 각각 캡슐화 한 후 서로 교환해서 사용
할 수 있는 패턴이며, 아래와 같은 장점이 있습니다.

- 코드 중복 방지
- 런타임(Runtime)시에 타겟 메소드 변경
- 확장성(신규 클래스) 및 알고리즘 변경 용이


즉, "프로젝트 전체에서 변경이 일어나지 않는 부분에서 변경이 일어나는 부분을 찾아서 따로 캡슐화 한다." 

라고 이해하시면 쉬울 듯 싶습니다.  


아래 설명을 읽어보시고 예제 소스코드를 학습하시면 쉽게 이해하실 수 있을 거라 생각합니다.

Java 관련 포스팅  :  Java 관련

Java 전략(Strategy) Pattern - 구조 설명

아래와 다이어그램으로 나타낼 수 있으며, 세부 항목은 하단에서 설명합니다.전략패턴 구조(Structure) - Strategy(전략) : 전략 사용을 위한 인터페이스 생성- ImplementationOne, ImplementationTwo : Strategy 인터페이스를 구현한 실제 알고리즘을 구현- Context : 인스턴스를 주입받아 직접 사용하는 역할Java 전략(Strategy) Pattern - 예제 소스 코드


위에 전략패턴을 적용한 4개의 파일로 구성되어 있는 자동차 행동을 직진, 후진, 좌회전, 우회전 표현하는
예제 소스 코드 입니다. 어렵지 않은 내용이니 차근차근 소스코드를 분석해 보시기 바랍니다.




CarMoveBehavior.java

1
2
3
4
5
package strategy;
 
public interface CarMoveBehavior {
    public void action();
}
Colored by Color Scripter
cs



CarBehavior.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class UpBehavior implements CarMoveBehavior{ 
    @Override public void action() { 
        System.out.println("Up!"); 
    } 
} 
 
class DownBehavior implements CarMoveBehavior{ 
    @Override public void action(){ 
        System.out.println("Down!"); 
    } 
} 
 
class LeftBehavior implements CarMoveBehavior{ 
    @Override public void action(){ 
        System.out.println("Left!"); 
    } 
} 
 
class RightBehavior implements CarMoveBehavior{ 
    @Override public void action(){ 
        System.out.println("Right!"); 
    } 
}
 
Colored by Color Scripter
cs





Car.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Car {
    private CarMoveBehavior carMoveBehavior;
    
    public Car(CarMoveBehavior carMoveBehavior) {
        this.carMoveBehavior = carMoveBehavior;
    }
    
    public void move(){
        carMoveBehavior.action();
    }
    
    public void setMoveBehavior(CarMoveBehavior carMoveBehavior)
    {
        this.carMoveBehavior = carMoveBehavior;
    }
}
Colored by Color Scripter
cs



Main.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Main {
    public static void main(String[] args) {
        
        System.out.println("=====Java Strategy Pattern=====");
        
        //Up
        Car car1 = new Car(new UpBehavior()); 
        car1.move(); 
        
        //Down
        Car car2 = new Car(new DownBehavior()); 
        car2.move();
        
        //Left
        car2.setMoveBehavior(new LeftBehavior()); 
        car2.move();
        
        //Right
        car2.setMoveBehavior(new RightBehavior()); 
        car2.move();
    }
}
Colored by Color Scripter
cs


Java Design Pattern 의 QuickGuide 및 추가 정보는 이 곳을 참고해 주세요.



Java 전략(Strategy) Pattern - 클래스 다이어그램(UML) 및 예제 실행


위의 예제는 아래와 같은 클래스 다이어그램으로 표현 가능합니다.


Class Diagram




소스 코드 작성 후 실행하시면 아래와 같이 동작하는 화면을 확인하실 수 있습니다. 


실제 실행 화면



마무리


실제 개발에서 디자인패턴 사용의 중요성은 아무리 강조해도 지나치지 않은 것 같습니다. 숙력된 객체 지향적으로 만들어진 디자인패턴의 사용은 프로그램 설계를 더욱 유연하게 합니다.

또한, 변화에 쉽게 대응 가능하게 되면서 궁극적으로 유지보수를 편하게 할 수 있다는 장점이 있는 것 같습니다.

유지보수가 원활하다면, 소프트웨어 유지 비용 절감의 부가효과도 당연히 따라오는 것이라고 생각이 됩니다.


이어지는 포스팅에서는 다양한 자바 디자인패턴에 대해 설명하겠습니다. 감사합니다.

소스코드 다운로드 :  strategy-pattern.zip



저작자표시 동일조건 (새창열림)

'언어 > Java' 카테고리의 다른 글

Java(자바) 디자인패턴 - 템플릿 메소드(Template Method) 패턴 설명 및 예제소스  (1) 2018.05.18
Java(자바) 디자인패턴 - 어댑터(Adapter) 패턴 설명 및 예제소스  (0) 2018.05.15
Java(자바) Runtime - 외부 프로세스(exec) 실행 예제 소스  (3) 2017.12.29
Java(자바) BlockingQueue - Producer 및 Consumer 패턴 예제  (0) 2017.12.27
Java(자바) 알고리즘 - 문자열로 서로 다른 단어 만들어내기(Anagram)  (2) 2017.12.25
  1. Java 관련 포스팅  :  Java 관련
  2. Java 전략(Strategy) Pattern - 구조 설명
  3. 아래와 다이어그램으로 나타낼 수 있으며, 세부 항목은 하단에서 설명합니다.전략패턴 구조(Structure) - Strategy(전략) : 전략 사용을 위한 인터페이스 생성- ImplementationOne, ImplementationTwo : Strategy 인터페이스를 구현한 실제 알고리즘을 구현- Context : 인스턴스를 주입받아 직접 사용하는 역할Java 전략(Strategy) Pattern - 예제 소스 코드
'언어/Java' 카테고리의 다른 글
  • Java(자바) 디자인패턴 - 템플릿 메소드(Template Method) 패턴 설명 및 예제소스
  • Java(자바) 디자인패턴 - 어댑터(Adapter) 패턴 설명 및 예제소스
  • Java(자바) Runtime - 외부 프로세스(exec) 실행 예제 소스
  • Java(자바) BlockingQueue - Producer 및 Consumer 패턴 예제
[좋은사람]
[좋은사람]
좋은사람의 개발 노트 입니다.
[좋은사람]
좋은사람의 개발 노트
[좋은사람]
전체
오늘
어제
  • 전체보기 (189)
    • 언어 (68)
      • Java (12)
      • Python (39)
      • C# (5)
      • PHP (4)
      • Go (8)
    • OS (18)
      • Linux (7)
      • Windows 10 (5)
      • Etc (6)
    • 빅데이터 & 분석 (8)
      • R (0)
      • Machine Learning (8)
    • 네트워크 (4)
      • Etc (4)
    • 웹 프론트 (25)
      • Javascript & ECMA (8)
      • Vue (13)
      • React (4)
    • 웹 백엔드 (15)
      • Spring (3)
      • Django & Flask (7)
      • Npm & Express (5)
    • 개발도구 (18)
      • Jetbrains (3)
      • Eclipse (5)
      • Git (4)
      • Atom & VScode (6)
    • 데이터베이스 (7)
      • Oracle (2)
      • MariaDB & MySQL (2)
      • Etc (3)
    • 모바일 (6)
      • Android (3)
      • Hybrid (3)
    • 라이프 (20)
      • 여행 & 일상 (6)
      • 취미 (14)

블로그 메뉴

  • 홈으로
  • 블로그소개
  • 태그
  • 방명록

공지사항

인기 글

태그

  • go
  • ubuntu
  • Thread
  • OCR
  • Linux
  • python
  • windows10
  • flask
  • Eclipse
  • ps4
  • vue.js
  • 개발자 면접
  • Database
  • 커펌
  • Algorithm
  • react
  • Java
  • SpringSTS
  • nodejs
  • C#
  • 디자인패턴
  • 머신러닝
  • CFW
  • javascript
  • centos
  • 인텔리j
  • 이클립스
  • 3DS
  • 리액트
  • Anaconda
  • ATOM
  • Git
  • 코딩 면접
  • 아톰 에디터
  • 2DS
  • 윈도우10
  • Django
  • 미뮤
  • php
  • npm

최근 댓글

최근 글

hELLO · Designed By 정상우.
[좋은사람]
Java(자바) 디자인패턴 - 전략(Strategy) 패턴 설명 및 예제소스
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.