상세 컨텐츠

본문 제목

Strategy Pattern(전략 패턴)

Java/Design Patterns

by ChrisMare 2019. 1. 2. 21:20

본문

전략이란?

어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등을 말할 수 있습니다.

여기서 문제를 해결한다고 하는데 문제란 어떤 문제를 말하는 걸까요?

java는 oop(object oriented programming)으로서, 객체지향을 중심으로 하여, 대부분의 클래스의 관계가 상속으로 이루어져 있습니다. 상속을 사용하게 되면, 상속받은 자식클래스는 부모의 메소드와 변수를 그대로 사용할 수 있어 코드의 재사용성을 높일 뿐만 아니라, 코드의 간결성을 확보할 수 있습니다.

그러나, 어디까지나 상속을 이용한다고 해서 다 좋은 것은 아닙니다.

대부분의 자식클래스들은 부모로부터 물려받은기능을 잘 이용하나, 몇몇 자식클래스는 필요하지 않은 기능을 물려받아 사용하게 되는 문제점이 발생하게 됩니다. 그 문제를 해결하기 위해서 Override를 이용하게 되는 경우, 그와 유사한 자식 클래스 모두가 그 기능을 Override를 하게 되어 코드의 중복성이 생겨나게 되기 때문에 좋은 코드라 할 수 없습니다. ( OCP위배 )

따라서 유사하거나 상황에 따라 혹은 클래스에 따라 달라져야 하는 행위(기능, Function, 메서드)들을 캡슐화 하는 방법이 존재합니다. 이 방식이 Strategy Pattern(전략 패턴)입니다.


Strategy Pattern(전략 패턴)

시스템 설계에서는 상속받은 객체마다 다를 수 있는 행위부분(메서드, 기능, Function)을 캡슐화해 교환하여 사용하는 패턴입니다. 쉽게 말해서... 전략을 쉽게(유연하게) 바꿀 수 있도록 해주는 디자인 패턴입니다.

그래서 이것을 해결하기 위해서 변경이 많은 부분은 인터페이스로 정의하고 인터페이스 변수를 자식클래스가 가지고 있는 방법으로 하면 자식클래스에서 인터페이스의 메서드를 부르게만 해놓아서 기능을 위임하는 방법을 사용하는 것입니다.


--> 공동의 부분(변화가 없는 부분)은 상속으로 묶으며 구조를 이루고, 이 구조에서 변화가 많이 일어나는 부분을 캡슐화하여 사용하는 클래스에서 캡슐화된 행위 클래스를 변수화 시켜 동적으로 쉽게 교환가능하게 구상한다.

이 처럼 전략(행위) 클래스를 변수화해서 사용하는 것을 구성을 이용하는 것이라고 표현합니다.



'Java > Design Patterns' 카테고리의 다른 글

객체지향 디자인의 5원칙(SOLID 원칙)  (0) 2019.01.02

관련글 더보기

댓글 영역