디자인 패턴이란? 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결방법을 말하며 협력 템플릿을 제공한다.
프레임워크란? 설계와 코드를 함께 재사용하기 위해 애플리케이션의 아키텍처를 구현 코드의 형태로 제공하며, 확장 가능한 코드 템플릿 또한 제공한다.
01 디자인 패턴과 설계 재사용
소프트웨어 패턴
패턴은 일반적으로 최소 세가지의 서로 다른 시스템에 특별한 문제 없이 적용할 수 있고 유용한 경우에만 패턴으로 간주할 수 있다.
패턴과 책임-주도 설계
객체지향 설계에서 가장 중요한 일은 올바른 책임을 올바른 객체에게 할당하고 객체 간의 유연한 협력관계를 구축하는 일이다.
패턴은 이러한 협력관계를 해결하기 위한 훌륭한 예제를 제공한다.
GoF의 디자인패턴에서 등장하는 수 많은 STRATEGY, BRIDGE, OBSERVER 등 패턴들이 존재 하지만 중요한것은 각 패턴들의 세부적인 내용이 아니라, 패턴은 특정한 상황에 바로 적용하고 설계를 빠르게 떠올릴 수 있다는 장점을 제공한다는 것이다. 즉, 책임 주도 설계의 절차를 하나하나 따르지 않고도 시스템 안에 구현할 객체들의 역할과 책임, 협력 관계를 빠르고 손쉽게 구성할 수 있다.
디자인 패턴의 구성요소가 클래스와 메서드가 아닌 역할과 책임이라는 사실을 이해하는 것이 중요하다.
어떤 구현 코드가 어떤 디자인 패턴을 따른다고 이야기할 때 역할, 책임, 협력의 관점에서 유사성을 공유한다는 것이지 구현 방식을 강제하는것은 아니다. 디자인 패턴은 역할, 책임, 협력의 템플릿을 제안할 뿐 구체적인 구현 방법에서 제한을 두지 않기 때문이다.
캡슐화와 디자인 패턴
STRATEGY 패턴의 목적은 알고리즘의 변경을 캡슐화하는 것이고 이를 구현하기 위해 객체 합성을 이용한다.
알고리즘의 변경을 캡슐화하는 방법은 다음과 같이 상속을 이용할 수 도 있다.
결론적으로 디자인 패턴에서 중요한 것은 디자인 패턴의 구현 방법이나 구조가 아닌 어떤 변경을 캡슐화하는지, 또 각 디자인 패턴이 변경을 캡슐화하기 위해 어떤 방법을 사용하는지를 이해하는 것이 중요하다.
패턴은 출발점이다
디자인 패턴이 현재의 요구사항이나 적용 기술, 프레임워크에 적합하지 않다면 패턴을 그대로 따르지 말고 목적에 맞게 패턴을 수정해야한다. 또한 패턴 사용시 패턴의 복잡성의 가치가 단순성을 넘어설 때만 정당화돼야하며 함께 작업하는 팀원과 패턴에 대한 지식공유가 필요하다.
02 프레임워크와 코드 재사용
프레임워크란 '추상 클래스나 인터페이스를 정의하고 인스턴스 사이의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한설계', 또는 '애플리케이션 개발자가 현재의 요구사항에 맞게 커스터마이징할 수 있는 애플리케이션의 골격'을 의미한다.
추상 클래스나 인터페이스와 추상화의 어떤 특징이 프레임워크의 재사용성을 향상시킬까?
일관성 협력이라는 주제와 관련이있다.
예를 들면 추상적인 상위정책은 구체적인 하위정책보다 변경 가능성이 낮다. 그러므로 의존성역전을 통해 하위정책이 상위정책을 의존하도록 설계하고 상위정책과 하위정책 패키지를 배포단위로 분리한다면 재사용가능한 프레임워크를 만들 수 있다.
'📚 Book > Object' 카테고리의 다른 글
14 일관성 있는 협력 (0) | 2020.05.02 |
---|---|
13 서브클래싱과 서브타이핑 (1) | 2020.04.26 |
12 다형성 (0) | 2020.04.12 |
11 합성과 유연한 설계 (0) | 2020.03.29 |
10 상속과 코드 재사용 (0) | 2020.03.22 |