[App 개발] Cocoa Design Patterns (1)
본문
****************************************
6. 코코아 디자인 패턴
Design Pattern은 객체 지향 설계를 구성하는 일반적인 방법입니다. 보통 패턴은 실제 코드를 포함하고 있지 않고 대신에 일반적인 프로그램 구성 요소 (객체)와 그것들이 어떤 특정한 문제들을 풀어나가기 위하여 어떻게 작용하는지를 설명합니다. 디자인 패턴의 핵심 요소는 패턴의 이름, 해결해야 할 문제와 해법, 그리고 패턴을 사용하는 결과들입니다.
여러분에게 생소한 여러 가지 클래스 이름과 개념들이 이번 장에서 소개될 것입니다. 여기서는 클래스의 자세한 사용법이나 디자인 패턴에 대한 완전히 설명을 하지 않는 대신, 개요와 기술에 대해서만 소개합니다. 이번 장에서 간단히 소개되는 클래스들의 사용법은 책 전체에서 자세히 다루어집니다. 이번 장의 목적은 코코아에서 사용되는 용어와 소프트웨어 공학에서 사용되는 용어들을 효과적으로 비교 참조할 수 있도록 돕는 데에 있습니다. 기본적으로 이 장에서는 코코아 프레임웍과 이 책을 보면서 인용되는 용어와 패턴의 기본 정의를 제공할 것입니다.
디자인 패턴의 이해
일반적으로 패턴은 소프트웨어 개발자들에게 구성 방법의 표현 양식을 제공합니다. 잘 알려진 패턴을 사용한 시스템은 이해하기 쉽습니다. 유명한 패턴들을 여러 개 갖고 있으면 개발자들에게 좋은 도구가 될 것입니다. 매번 프로그램을 개발할 때마다 새로운 도구를 만드는 대신 갖고 있는 도구들을 사용할 수 있기 때문입니다.
패턴의 이름은 개발자들간에 통용할 수 있는 공용어를 제공합니다. 이름만 가지고도 패턴의 세부 사항, 그것이 가지는 뜻을 빠르게 교환할 수 있습니다. 코코아는 개발될 때부터 가지고 있던 중요 개념들을 제공하는 특별한 용어들을 가지고 있습니다. 이러한 용어에 익숙해지면 코코아를 이해하고 사용하기 더 편하게 될 것이고, 다른 개발자들에게 디자인을 설명하기에도 수월할 것입니다.
각각의 패턴들은 여러 가지 문제들의 상황의 범위에 따라 사용해야 합니다. 패턴을 이해할 때 어떤 경우에는 쓰고 어떤 경우에는 쓰지 말아야 하는지를 확인해야 합니다. 이것은 대부분 경험의 문제이기 때문에 패턴의 문제들을 기록한 문서는 다른 개발자들의 경험을 공유할 수 있게 해 줍니다.
패턴의 핵심은 그것이 제공하는 해법입니다. 이것은 패턴을 구성하는 데에 쓰인 다양한 프로그램 요소 (일반적으로 객체) 들입니다. 어떻게 요소들이 협력하고 각 요소의 책임 한계를 결정짓는 것 또한 해법의 일부입니다. 패턴은 그것이 어떻게 응용되는지를 예로 보여주는 경우 외에는 실제 코드를 담고 있지 않습니다. 대신에 특정한 문제에 가장 잘 맞도록 변형 가능한 기본 템플릿 형태로 제공됩니다. 개발자가 패턴에 대해서 충분히 이해하고 있다면 실제 잘라 붙일 코드가 없다 할지라도 프로그램을 빠르고 효율적으로 구현할 수 있습니다.
대부분의 패턴 정의에는 패턴을 사용하는 결과들에 대해서 담고 있습니다. 모든 디자인에는 장단점이 있고, 이러한 면에서 다른 모든 디자인과 비교해서 어떤 패턴을 사용할 것인지를 선택합니다. 디자인의 결과에 대해서 알고 있으면 더 좋은 결정을 내릴 수 있는 것은 당연합니다.
코코아 프레임웍은 상당히 자기 일관성이 있습니다. 개발자들은 일반 패턴들을 사용했고, 특수한 패턴은 거의 사용하지 않았습니다. 왜냐하면 패턴은 프레임웍 전체에 영향을 미치기 때문에 실제 프레임웍을 구현하기 전에 패턴을 구성하는 것이 유용합니다. 유명한 패턴을 사용하는 것이 전체 프레임웍 구성을 간단하게 합니다. 패턴이 이해되고 나면 해결할 수 있는 문제들과 해법의 결과들이 효과적으로 수반됩니다.
디자인 패턴 용어
코코아는 기본적인 디자인 패턴에 사용되는 객체 지향 설계에서 찾아볼 수 있는 이름들과는 다른 특별한 용어들을 사용합니다. 따라서 코코아의 용어를 배우고 다른 용어들과 어떻게 관계가 있는지를 배워두면 유용합니다. 어떤 경우에는 개념간의 미묘한 차이에 따라서 용어가 달라질 수도 있습니다. 어떤 경우에는 같은 의미임에도 다른 방법으로 개발되어 결과적으로 다른 이름을 갖게 된 경우도 있습니다.
이제 소개되는 패턴들은 코코아 개발자들에게 공통적으로 사용되는 용어를 사용했습니다. 어떤 것은 코코아 특유의 패턴도 있지만, 대부분 다른 문헌에서 다른 이름으로 발견할 수 있는 것들입니다.
NOTE
기본적인 패턴에 대해서 더 많이 알고 싶으신 분은 "Gang of Four" (GOF), Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley, ISBN 0-201-63361-2) 책을 보십시오. 이 책에 소개된 패턴들은 일반적으로 GOF patterns 라고 합니다. 코코아에서 사용하는 많은 패턴들을 이 책에서 볼 수 있고 더 자세한 내용을 볼 수 있습니다. 이 책에서는 코코아에서 사용한 이름과 GOF 패턴의 이름을 같이 제공하겠습니다. 이 책을 읽거나 코코아를 사용하기 위해서 GOF 패턴을 알아야 할 필요는 없습니다만, 이것을 이해하면 코코아를 더 빨리 배우는데 도움이 될 것입니다.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 2
박진철님의 댓글
수고가 많으십니다.^^;
제가 코코아 프로그래밍을 이해 할려면 많은 수행이 필요 할 듯 싶습니다.
먼가 초보자도 접근 할만한 것이라고 잘못 판단한 것 같네요...-_-;
객체지향 프로그래밍에 대한 기본 개념부터 배워봐야 겠습니다.^^
hongjuny님의 댓글
디자인 패턴은 사실 알고보면 대단한 것은 아닙니다. ^^ 프로그램 내장 방식인 폰 노이만 형 컴퓨터가 개발된 지 반세기가 되도록 소프트웨어 공학에 이렇다할 진보가 없었다가 (물론 이런 말을 함부로 했다가 소프트웨어 공학자들에게 비난의 화살을 맞겠죠... ㅡㅡ;), 이제서야 빛을 보게 된 과거의 경험과 노하우를 축적하고 전달할 수 있는 체계적인 구조의 결정체라고 봐야죠. ^^;
사실 경험 있는 프로그래머의 눈으로 디자인 패턴 책을 보면 다 알만한 내용들이 적혀 있다는 것을 금방 알 수 있습니다. 다만 지금까지는 소수의 사람들이 자기들끼리만 알고 있는 양 곶감 빼먹듯 써먹던 스트럭쳐들이 이제는 모든 사람에게 공식적으로 알려지게 된 것이라고 저는 생각합니다.
제가 공부할 적에 교수님은 이런 표현을 쓰더군요. 디자인 패턴이라는 것은 이제 늙은 교수들이 자기가 프로그램 짜기는 힘들고 귀찮지만, 아직 은퇴하자니 은행 융자도 다 못 갚았기 때문에, 자신들의 지배 구조를 더욱 튼튼히 하기 위한 최상위 레이어를 하나 더 깔아서 더 울궈먹으려는 수작이다... 라는... ㅋㅋ