본문 바로가기
카테고리 없음

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 1장 서론(1.1~1.2)

by 라꾸스떼(YR) 2020. 4. 1.
반응형

[Chapter 1. 서론]

객체지향 소프트웨어를 설계한다는 것은 쉬운 일이 아닙니다. 적절한 객체를 식별해야 하고, 올바른 크기의 클래스와 클래스의 인터페이스를 정의해야 하고, 클래스 간의 상속을 정의하며, 클래스들 간의 관계를 설정할 수 있어야 합니다. 나중에 생길 수 있는 문제나 추가된 요구 사항들도 수용할 수 있도록 일반적이고 포괄적이어야 합니다. 즉, 재설계를 하지 ㅇ낳아도 다시 사용할 수 있어야 하고, 아니면 가능한 최소한의 수정을 통해서 다시 사용할 수 있는 설계여야 합니다.

디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와줍니다. 또한 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 또는 설계의 의도 등까지 명확하게 정의할 수 있습니다. 간단하게 말해서, 디자인 패턴은 설계자들이 “올바른” 설계를 빨리 만들 수 있도록 도와줍니다.

 

[1.1 디자인 패턴이란?]

패턴에는 다음의 네 가지 요소가 있습니다.

1.패턴 이름(Pattern Name) : 패턴의 이름을 정의해 두면 문서에서 이 이름을 사용하여 설계의 의도를 표현할 수 있게 됩니다. 개발자들 간의 의사소통이 원활해집니다.

2.문제(Problem) : 언제 패턴을 사용하는가를 서술하며 해결할 문제와 그 배경을 설명합니다. 즉, “어떤 알고리즘을 객체로 만들까”와 같은 설계의 세밀한 문제를 설명할 수 있습니다.

3.해법(Solution) : 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술합니다. 그렇다고 해법이 어떤 구체적인 설계나 구현을 설명하지는 않습니다. 왜냐하면 패턴은 다양한 경우에 적용할 수 있는 템플릿(Template)이기 때문입니다.

4.결과(Consequence) : 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술합니다. 소프트웨어에서 결과란 가끔 시간이나 공간 사이의 균형일 수도 있습니다. 즉, 시간을 중요한 요소로 볼 것인지 아니면 저장 공간의 효율을 중요한 요소로 볼 것인지에 따라 다른 설계 방법을 선택해야 한다는 것입니다. 재사용은 객체지향 설계의 주요 요소이므로, 패턴의 결과는 시스템의 유연성, 확장성, 이식성 등에 커다란 영향을 줍니다.

디자인 패턴은 “특정 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명”입니다.

하나의 디자인 패턴은 재사용 가능한 객체지향 설계를 만들기 위해 유용한 고통의 설계 구조에서 주요 요소들을 식별하여 이들에게 적당한 이름을 주고 추상화합니다. 그리고 패턴에 참여하는 클래스와 그들의 인스턴스를 식별하여 역할과 그들 간의 협력 관계를 정의하고 책임을 할당합니다.

 

[1.2 스몰토크 MVC를 사용한 디자인 패턴]

MVC(Model/View/Controller)

MVC는 세 가지 객체로 구성되어 있습니다. 모델(Model)은 응용프로그램 객체이고, 뷰(View)는 스크린에 모델을 디스플레이하는 방법이며, 컨트롤러(Controller)는 사용자 인터페이스가 사용자 입력에 반응하는 방법을 정의합니다. 유연성과 재사용성의 증대를 위해서 MVC는 이들 간의 결합도를 없앱니다.

MVC는 뷰와 모델 간에 등록/통지(Subscribe/Notify) 프로토콜을 만들어 종속성을 없앱니다. 뷰는 그 외형이 반드시 모델의 상태를 반영하도록 보장해야 합니다. 모델의 데이터가 변경될 때마다 모델은 자신과 관련된 뷰에 알려주고, 이 통보에 따라서 각 뷰는 스스로 자신의 외형을 변경해야 합니다.

한 객에체서 일어난 변경을 다른 객체들에 반영하도록 별도의 객체를 둠으로써, 변경이 일어난 객체는 변경 반영이 필요한 다른 객체들을 알 필요가 없게끔 객체를 분리하는 겁니다. 이런 설계를 일반화하는 것이 ‘감시자 패턴’입니다.

일반적으로 단일 객체처럼 복합 객체를 사용하고 싶은 때가 많은데, 이런 일반적 설계를 담는 것이 ‘복합체 패턴’입니다.

뷰와 컨트롤러 관계는 ‘전략 패턴’의 한 예입니다. 전략 패턴은 알고리즘을 표현하는 객체로 정적 또는 동적으로 알고리즘을 대체하고자 할 때 매우 유용한 방식입니다. 또한 다양한 알고리즘의 변형이 가능하거나, 알고리즘이 캡슐화해야 할 데이터 구조가 복잡할 때 유용한 방식이기도 합니다.

‘팩토리 메서드 패턴’을 이용해서 뷰에 대한 기본 컨트롤러 클래스를 지정한다든지, ‘장식자 패턴’을 이용해서 뷰에 스크롤을 추가한다든지.

MVC에서 뷰와 컨트롤러 관계를 맺어주는 데 주로 쓰이는 패턴은 ‘감시자’, ‘복합체’, ‘전략 패턴’입니다.

반응형

댓글