본문 바로가기
Junior 사내스터디

전략패턴

by fabxoe 2019. 11. 6.

모든 디자인 패턴이 만족하는 것은 아니지만,

대부분의 디자인 패턴은 확장에는 열려있고 수정에는 닫혀있는 ocp의 달성을 지향한다.

 

전략패턴 이란?

여러 알고리즘이 존재할 때 하나의 추상적인 접근점(인터페이스)을 만들어

접근점에서 원하는 알고리즘을 선택해서 문제를 쉽게 해결하기 위한 구조를 마련해주는 패턴이다.

->동일 목적 알고리즘의 선택 적용 문제(패턴을 구분 짓는 것은 구현방법이 아니라 '용도'이다)

 

전략패턴의 장점

새로운 알고리즘이 개발되더라도

기존에 작성했던 클래스의 코드를 수정하지 않고도 이를 쉽게 추가 적용할 수가 있게한다. (ocp달성과 밀접)

 

 

전략패턴의 작은 특징들

1. 동일한 알고리즘이라도 적용대상에 따라 새로운 알고리즘 객체가 생성될 가능성이 크기 때문에,

runtime에서 사용되고 있는 객체의 수를 증가시킨다. 전략패턴을 사용하더라도 생성되는 객체수가 많아지지 않도록 사용해야한다.

 

2. 전략의 하위 클래스들 중 어떤 클래스의 객체를 사용할지는 Client에서 결정된다.

각 알고리즘이 캡슐화가 되었다고 하지만, 여러개의 알고리즘이 존재하는 상황에서 사용되기에,

실제로 사용자의 입장에서는 사전에 미리 전략의 하위 클래스들에 대해 서로간의 대략의 차이를 알고 있어야 사용할 수 있다. (기술 문서 제공과 그 문서를 읽을 필요성)

 

 

ex)

입력한 값에 상관없이 동작하는 정렬알고리즘

사용할 DB종류에 따라 DB커넥션 선택

 

 

 

구현방법

1. 변경될 부분에 인터페이스를 사용한다.

2. context에 인터페이스 멤버변수를 두어서 주입해서 사용하자.

 

전략패턴은 상속사용시 구현 클래스에 직접 의존하게 되어 기존 코드를 수정하게 되는 경향을 피하고자 한다.

상속대신에 변경될 부분에 인터페이스를 작성한다음 client에서 주입시킨다.

이를 합성이라고한다.

 

여기서의 합성은 UML의 흰색다이아몬드인 Aggregation표기가 의미하는 것과 같이

생성자나 setter의 파라미터로 주입하여 이용하는 형태를 말한다.

 

합성을 이용하면 런타임중에도 원하는 기능을 주입하여 변경이 가능하다.

-------------------------------------------------------------------------------------------------------

2019년 11월 8일 추가

 

전략 패턴은 UML의 Aggregation이 의미하는 합성 중에서도 setter 파라미터로 주입하여 이용하는 것과 매우 유사하다.

하지만 용도가 다르다.

생성자의 파라미터로 주입하는 것은 해당하지 않는다.

https://fabxoe.tistory.com/63

댓글