본문 바로가기
디자인패턴

디자인패턴과 전략패턴

by 임동무 2022. 12. 28.

디자인 패턴이란?

프레임워크나 라이브러리를 이용하면 다른 사람이 만들어 놓은 방대한 양의 코드를 그대로 활용하여 수많은 기능을 사용할 수 있다.

적절한 구성요소를 선택해서 제 자리에 넣기만 하면 해당 기능을 구현할 수 있기 때문이다. 하지만 이런 기능들이 어플리케이션의 구조를 만드는데, 관리하기 용이하게 하는데에 도움을 주지는 않는다.

이를 위해서 라이브러리보다 더 높은 단계에서 소프트웨어 구조에 대해서 이해하기 쉽고, 관리하기 유연하게 만들어주는 것이 바로 디자인 패턴이다.

 

 

이런 디자인 패턴에는 몇가지 원칙이 있다.

  1. 어플리케이션에서 달라지는 부분과 달라지지 않는 부분을 분리한다.
  2. 구현보다는 인터페이스에 맞춰서 프로그래밍 한다.
  3. 상속보다는 구성을 활용한다.

 

먼저 달라지는 부분과 달라지지 않는 부분을 분리하는 것에 대해 생각해보자.

개발자에게 요구되는 요구사항들은 끊임없이 변화한다. 그럴 때마다 전체적인 코드를 모두 수정해야 한다면 번거롭기도 하고 실수로 인해 오류가 발생할 수도 있다. 그렇기 때문에 기존과 다른 요구사항이 주어졌을 때 변화의 가능성이 있는 부분과 없는 부분을 나누고

바뀌는 부분은 따로 뽑아서 캡슐화 한다면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 바뀌는 부분만 고치거나 확장할 수 있다.

 

 

구현보다 인터페이스에 맞춰서 프로그래밍을 한다는 것은 상위 클래스에서 구체적으로 구현하거나, 서브클래스 자체에서 별도로 구현하는 방법과는 상반된 방법이다. 구현보다 인터페이스에 맞추라는 의미는 상위 형식에 맞추라는 의미이다. 따라서 변수를 선언할 때 추상 클래스나 인터페이스 같은 상위 형식으로 선언한다. 이 원칙을 이용하면 구체적인 구현에 맞추지 않고 코드를 짤 수 있다. 즉, 특정 행동에 대한 메서드를 어떤 객체 내부에서 정의하는 것이 아니라, 다른 클래스에 위임한다는 것이다.

 

 

상속보다는 구성을 활용한다. 여기에서 구성은 " A 안에는 B가 있다 " 라는 구조일 때, 두 클래스를 합치는 것을 의미한다.

오리는 나는 행동, 꽥꽥 거리는 행동 이 두가지가  있을 때 오리와 나는행동을 구성하고, 오리가 꽥꽥거리는 행동을 구성하여 클래스를 합칠 수 있다. 구성을 활용해서 시스템을 만들면 유연성을 크게 향상시킬 수 있다. 알고리즘군을 별도의 클래스 집합으로 캡슐화 하며, 객체에서 올바른 행동 인터페이스를 구현하기만 하면 실행시에 행동을 바꿀수도 있다.

 

 

 

앞에서 언급한 것들이 바로 전략패턴이다. 전략패턴은 알고리즘군을 정의하고 캡슐화하여 각각의 알고리즘군을 수정해서 사용할 수 있게 해주는 패턴으로 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.

댓글