디자인 패턴
디자인 패턴은 객체지향 설계에서 반복되는 문제의 검증된 해법이다. 이 해법에 이름을 붙이면 설계자끼리 같은 어휘로 소통할 수 있다. GoF가 정리한 디자인 패턴 카탈로그는 23개다. 목적에 따라 생성, 구조, 행동 패턴으로 나뉜다. 생성 패턴은 객체를 어떤 클래스로…
주요 장면
대본
디자인 패턴이란
디자인 패턴은 객체지향 설계에서 반복되는 문제의 검증된 해법이다.
이 해법에 이름을 붙이면 설계자끼리 같은 어휘로 소통할 수 있다.
GoF 23개 패턴 분류
GoF가 정리한 디자인 패턴 카탈로그는 23개다.
목적에 따라 생성, 구조, 행동 패턴으로 나뉜다.
생성 패턴은 객체를 어떤 클래스로 만들지 감추어 결합도를 낮춘다.
구조 패턴은 클래스나 객체를 합성하고, 행동 패턴은 상호작용과 책임을 나눈다.
클래스 패턴과 객체 패턴
패턴은 목적 축과 범위 축의 두 기준으로 나뉜다.
범위는 클래스냐 객체냐의 구분이다.
클래스 패턴은 상속으로 정하며 컴파일 타임에 정적으로 결정된다.
객체 패턴은 객체 간 관계를 다루며 런타임에 바뀔 수 있다.
화이트박스와 블랙박스 재사용
재사용 기법은 화이트박스 재사용과 블랙박스 재사용으로 나뉜다.
화이트박스 재사용은 상속으로 부모 구현을 물려받는다. 부모 내부가 서브클래스에 공개된다.
블랙박스 재사용은 합성으로 인터페이스를 통해 다른 객체를 참조한다.
그래서 디자인 패턴 대부분은 블랙박스 방식을 우선한다.
인터프리터 패턴 예시
인터프리터 패턴은 간단한 문법을 객체로 바꿔 해석하는 구조다.
구성요소는 Context 등 다섯 가지이며, 역할은 표와 같다.
종단 표현식은 숫자 1에 값을 돌려주고, 덧셈 노드는 두 값을 더한다.
따라서 후위 표기 1 1 + 의 해석 결과는 2가 된다.
시험에서 헷갈리는 점
시험에서 자주 틀리는 부분을 짚는다.
목적 분류는 생성·구조·행동이고, 범위 분류는 클래스·객체다.
상속은 부모 구현을 노출해 캡슐화를 깨뜨리므로 합성과 구분해 쓴다.
위임은 합성을 상속만큼 강력하게 하지만, 동적이라 흐름이 이해하기 어렵다.
정리
마지막으로 핵심을 정리한다.
디자인 패턴은 검증된 설계 해법을 이름으로 공유하는 것이다.
GoF 23개 패턴은 목적과 범위의 두 축으로 분류한다.
설계에서는 상속보다 합성을 우선한다.