스트레티지 패턴은 기능을 부품화 하는 것을 말한다.
이 패턴을 사용하면 클라이언트와 무관하게 독립적으로 알고리즘을 변경할 수 있고(quickSort→bubbleSort), 클라이언트는 독립적으로 원하는 알고리즘을 사용할 수 있다. 즉 이 패턴은 클라이언트에게 알고리즘이 사용하는 데이터나 그 구조를 숨겨주는 역할을 한다. strategy 패턴은 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조로 알고리즘을 동적으로 교체할 수 있다.
스트레티지 패턴(Strategy Pattern)
알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
조금 말이 어려울 것입니다. 쉽게 말하면, 어떤 객체를 만들 때 객체가 가지는 기능들이 다양하게 존재할 것 입니다. 이러한 기능들을 추상화 하여 언제든지 적용할수 있게 만드는 것 입니다. 즉 기능을 부품화 하는 것 입니다.
예를 들어 포니와 그랜저 자동차가 있습니다. 포니에 들어가는 기어 연결부분과 그랜저에 들어가는 연결부분이 동일하다고(추상화) 하면, 저급기어, 중급기어, 고급기어를 만들어 두고 상황에 따라서 적당한 기어를 적용할수 있을것 입니다. 즉 포니에는 저급기어를, 그랜저에는 고급기어를 적용하는것 입니다.
이렇게 기능을 부품화하여 구조를 만드는 것을 스트레티지라고 생각하시면 됩니다.
개인적으로 실무에서 가장 많이 사용했고. 알아두면 아주 유용하게 사용할 수 있는 패턴 입니다. 노파심에 말씀 드리면, 한번에 모든 것을 알 수는 없습니다. 그리고 안다고 하여도 실제 본인의 개발 소스에 적용하시란 쉽지 않습니다. 꾸준히 살펴보고, 고민해 보는 자세가 중요 합니다.
이번에 살펴 볼 예제는 로봇을 프로그램으로 만들어 보는 것 입니다.
시나리오
위 3가지 형태의 로봇을 만들어 보도록 하고, 추후 다른 로봇을 만들어야 할 경우를 생각하여 유연한 프로그램을 만들어 보도록 합니다.
1. 상속, 추상클래스를 하지 않고 일반적으로 class를 만들고 메소드를 만들면 코드에 양이 많아지고 똑같은 기능에 코드를 반복적으로 코딩을 해야하는 불편함이 있다. 나중에 다른 사용자가 기능을 추가하기 불편하다.
exntends = 상속
2. 위에 class (super, standard, Low) 에서 공통적인 기능들은 따로 Robot.class를 만들어서 상속 기능을 통해 코드를 줄여서 효율적으로 만들수 있다.
상속 - 공통적인 기능 : 걷고, 달린다, 로봇 모양은 팔, 다리, 머리, 몸통 이다.
abstract = 추상클래스
3. 새로운 사용자가 로봇을 만들려고할때
메소드를 추상화 시켜놓고 무조건 구현하게 만든다
( 날다, 미사일, 레이저검(목검) 기능
public abstract void actionFly();
public abstract void actionMisail();
public abstract void actionKnife(); )
참고: https://www.youtube.com/watch?v=YqqkElW8PR0&list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9&index=22
'프로그래밍 > JAVA' 카테고리의 다른 글
자바빈(DTO), DAO (0) | 2018.07.28 |
---|---|
JAVA 관련 사이트 기술 커리큘럼 (0) | 2018.07.25 |
Java for-each 쉽게 이해하기 (0) | 2018.07.19 |
JAVA 싱글턴 패턴 (0) | 2018.07.19 |
자바 interface(인터페이스) (0) | 2018.07.18 |