Design Pattern for Smalltalk – Composite

t_Dpsc_chapter04_Composite_01v02

Composite 패턴은 객체의 그룹됨을 이용한 객체의 임의적 묶음에 대한 패턴이다. Composite 패턴은 크게 Component, Composife, leaf 등으로 구성된다. Component는 클래스 구조에서 최상위에 해당하는 요소로서 객체의 그룹화 및 포함하는 인스턴스의 동적관리를 위한 내부적 자료구조와 사용을 위한 메서드(인터페이스)를 포함하게 되며 일반적으로 추상클래스가 그 성질이 된다.

Composite는 container로서의 성질을 가지며 하위인스턴스를 포함할 수 있다. leaf는 단말의 성질을 가지며 하위인스턴스를 포함할 수 없고 인스턴스의 포함에 대한 메서드도 동작시킬 수 없다. leaf는 종류별로 고유의 특성을 가지는것이 일반적이며 Composite에 의해 관리될 수 있는 (그룹의 요소를 포함/제거 할 수 있는) 성질을 가진다.

Composite와 leaf는 본질적으로 같은 뿌리에서 나왔으므로 기본적인 뼈대는 동일하다고 봐야하지만 실제 사용되는 부분에서는 차이가 있다고 인식해야 한다. 이에대한 좋은 예로서 [디자인 패턴]에 언급되어있는 computer parts에 대한 내용이 좋은데, 개념적인 단계에서 Composite 패턴을 활용까지 풀어냈다고 할 수 있다.

Composite의 특징에는 factory Method 를 이용한 행위 구현에 대한 위임이 있다. 구조화 된 객체 트리구조와 추상클래스에서 하위클래스로 이어지는 구체적 구현에 대해 위임의 형태를 가지는 경우라면 Composite 패턴으로 간주하기도 한다.

[DPSC composite 패턴 – Signal Collection] 부분참고.

Design Pattern for Smalltalk – adapter

t_Dpsc_chapter04_Adapter_01v2

adapter패턴은 어떤 class의 interface가 원하는 규칙에 어긋날 때 범용성을 확보하기 위해서 어떤 class의 앞줄에 원하는 interface를 구현해서 인자나 동작등을 변환하는 구조를 의미한다. 이 경우 어떤 class를 adaptee, 동작이나 interface를 변환하는 역할을 adapter 라고 한다. 구현에는 크게 분류해서 class adapter와 object adapter의 두가지 방식이 있다.

class adapter 방식은 기반이 되는 상위클래스를 하나 상속해서 그것에 살을 덧붙여 구현하는 방식으로 오버라이드를 사용할 수 있으며 새로 구현된 클래스의 인스턴스가 목적에 대한 직접적인 역할을 가지게 된다.

object adapter 방식은 별도의 클래스를 하나 만들어서 그 클래스에 필요한 다른 클래스(adaptee)의 인스턴스를 내부 조작에 따라 그때 그때 사용하는 것으로서, 유연하기는 하지만 직접적인 역할은 해당 기능을 하는 클래스이 인스턴스로 넘기게 된다. 이 경우 adaptee 클래스를 내부에서 바로 사용하는 것 보다는 adaptee에 사용을 원하는 용도의 하위클래스를 만들고, 그렇게 만들어진 하위클래스의 인스턴스를 사용하는것이 가장 좋다.

Design Pattern for Smalltalk – Singleton

t_Dpsc_chapter03_Singleton_01

Singleton 패턴을 아주 단순하게 설명하자면 단일 클래스에 대한 단일 인스턴스라고 할 수 있다. 하지만 정확하게 따지자면 Singleton은 “단일 인터페이스를 통한 단일 인스턴스의 관리”가 된다. Singleton이 구현된 환경이 단 한개의 class만이 존재하는것이 아니라 이 클래스를 상속받은 하위클래스가 존재하는 경우, 이 class 군에서 관리하는 인스턴스가 오직 하나만 존재하는것이 이 패턴의 핵심이라 할 수 있다. 상위클래스와 하위클래스가 존재하는 구조라고 해도 이 클래스 군에서는 하나의 인스턴스만 관리한다는 것이 Singleton 패턴이다. 이런경우 Singleton패턴을 환경변수 또는 현재 프로그램이 구동되는 환경에 따라 필요한 하위 클래스를 선택해서, 이를 단일 인스턴스로 관리하거나 필요한 동작 방식을 선택하게 된다.

Singleton의 하위클래스 까지 가지고 있는 구조의 경우 환경에 따라 어떤 레벨의 (또는 어떤 종류의) 하위 클래스를 사용하게 될지 등을 Singleton의 최상위 추상클래스의 initialize 초기화 메서드에서 선언해주면 이후 환경에 따라 자동으로 필요한 인스턴스를 생성하는 클래스를 설계할 수 있다.

Smalltalk 에서는 메타클래스가 Singleton의 예가 된다.