• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] Cocoa Design Patterns (1)

본문

코코아를 배울 때, 코코아가 사용하는 용어 때문에 어려움을 겪으시는 분이 많으실 것입니다. 그 중에서도 코코아 설계에 응용된 디자인 패턴의 개념이 익숙하지 않아서 더 힘들게 느껴지시는 분들이 계실 줄 압니다. 제가 갖고 있는 책 Cocoa Programming 중에서 특별히 Design Pattern 에 관해서 기본적인 설명을 하고 있는 장을 번역해 올리려고 합니다. 일단 제가 영어를 잘 못하고... (하하... 음냐...) 생계에 쫓기다보니 얼마나 빨리 올릴 수 있을지는 모르겠습니다만, 얼른 NeHe도 끝내야 하는데... 일단 서론 부분부터 올리기 시작하겠습니다. 일을 저질러 놓으면 어떻게든 끝을 보게 되겠죠. ^^

****************************************

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 패턴을 알아야 할 필요는 없습니다만, 이것을 이해하면 코코아를 더 빨리 배우는데 도움이 될 것입니다.
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 2

박진철님의 댓글

수고가 많으십니다.^^;

제가 코코아 프로그래밍을 이해 할려면 많은 수행이 필요 할 듯 싶습니다.
먼가 초보자도 접근 할만한 것이라고 잘못 판단한 것 같네요...-_-;

객체지향 프로그래밍에 대한 기본 개념부터 배워봐야 겠습니다.^^

hongjuny님의 댓글

디자인 패턴은 사실 알고보면 대단한 것은 아닙니다. ^^ 프로그램 내장 방식인 폰 노이만 형 컴퓨터가 개발된 지 반세기가 되도록 소프트웨어 공학에 이렇다할 진보가 없었다가 (물론 이런 말을 함부로 했다가 소프트웨어 공학자들에게 비난의 화살을 맞겠죠... ㅡㅡ;), 이제서야 빛을 보게 된 과거의 경험과 노하우를 축적하고 전달할 수 있는 체계적인 구조의 결정체라고 봐야죠. ^^;
사실 경험 있는 프로그래머의 눈으로 디자인 패턴 책을 보면 다 알만한 내용들이 적혀 있다는 것을 금방 알 수 있습니다. 다만 지금까지는 소수의 사람들이 자기들끼리만 알고 있는 양 곶감 빼먹듯 써먹던 스트럭쳐들이 이제는 모든 사람에게 공식적으로 알려지게 된 것이라고 저는 생각합니다.
제가 공부할 적에 교수님은 이런 표현을 쓰더군요. 디자인 패턴이라는 것은 이제 늙은 교수들이 자기가 프로그램 짜기는 힘들고 귀찮지만, 아직 은퇴하자니 은행 융자도 다 못 갚았기 때문에, 자신들의 지배 구조를 더욱 튼튼히 하기 위한 최상위 레이어를 하나 더 깔아서 더 울궈먹으려는 수작이다... 라는... ㅋㅋ

전체 121 건 - 3 페이지
2004.01
25

[App 개발] CoreGraphics의 풀스크린 화면 만들기

박진철님께서 올리셨던 질문 중에 코코아에서 퀵드로우의 CopyBits대신 사용할 수 있는 방법으로서 아시는 분들은 다 아실만한 CGDirectDisplay 를 이용한 방법을 한 번 시도해 보았습니다. 프로그램은 심히 완성도가 떨어지는 관계로 감히…

2004.01
23

[App 개발] Cocoa Design Patterns (5)

Commands GOF의 패턴에 익숙하신 분들은 아마 타겟/액션이 마치 커맨드 패턴의 구현이라고 생각될 것입니다. 그러나 커맨드 패턴같은 것이 타겟/액션과 같은 구현이 이용된다 하더라도 Objective-C에서는 그것이 필요가 없습니다. 커맨드 패턴…

2004.01
22

[App 개발] Cocoa Design Patterns (4)

Enumeration 코코아의 모든 콜랙션 클래스는 계수기를 제공합니다. 이 패턴은 GOF의 반복기 패턴과 비슷합니다. 계수기는 객체의 집합을 훑어내고 각 객체에 어떤 일을 수행하는 방법을 제공합니다. 특정한 집합에 대하여 특수한 루프를 짜 주는 대…

2004.01
22

[App 개발] NeHe Lesson 16

이번 강의는 Chris Aliotta가 제작하였습니다. 당신의 OpenGL 프로그램에 안개를 넣고 싶으십니까 이번 강의에서 바로 그 방법을 보여드리려고 합니다. 저는 강의를 쓰는 것은 처음이고, OpenGL/C++ 프로그래밍은 근래에 시작한 것이…

2004.01
18

[App 개발] Cocoa Design Patterns (3)

평일은 바쁘니까 아무래도 주말에 열심히 진도를 나가는 것이 좋겠지요 번역이 많이 서툴러서 읽으시기에 불편하실지 모르겠습니다. 죄송합니다. ***** Class Clusters 클래스 클러스터는 복잡한 상속 구조를 숨기는 방법입니다. 기본적…

2004.01
18

[App 개발] NeHe Lesson 13

바로 뒤에 이어지는 두 개의 폰트 강의는 그냥 건너뛰려고 합니다. 윈도우 전용 코드 설명에 많은 부분이 할애되는 것도 그렇고, agl 함수 래퍼런스도 저에게 부족해서 (그리고 제 실력도 부족해서... 하하...) 일단은 이정도 선에서 폰트는 접도록 하…

2004.01
17

[App 개발] Cocoa Design Patterns (2)

Model-View-Controller 모델-뷰-컨트롤러, 줄여서 MVC 패턴은 패턴 이상의 구조물이라고 간주됩니다. 왜냐하면 이것은 응용 프로그램을 정리하는 기본적인 방법이며 모든 패턴들을 아우르는 상위의 구조적인 요소이기 때문입니다. 왜냐하면…

2004.01
17

열람중 [App 개발] Cocoa Design Patterns (1)

코코아를 배울 때, 코코아가 사용하는 용어 때문에 어려움을 겪으시는 분이 많으실 것입니다. 그 중에서도 코코아 설계에 응용된 디자인 패턴의 개념이 익숙하지 않아서 더 힘들게 느껴지시는 분들이 계실 줄 압니다. 제가 갖고 있는 책 Cocoa Progra…

2004.01
15

[App 개발] Nehe Lesson 12

이번 강의에서는 출력 리스트를 이용하는 법을 배우겠습니다. 단순히 리스트를 만들어 빠르게 하는 것 뿐만 아니라 간단한 GL 씬을 만들어야 할 때 몇 줄로 나누어 따로 사용할 수 있습니다. 예를 들어서 각 판을 두 개의 운석으로부터 시작하는 ast…

2004.01
13

[App 개발] NeHe Lesson 11

대충 소스를 돌아가게끔만 만들어서 캡춰해서 게재를 하다보니 혹시라도 소스코드상에 오류나 옛날 루틴의 찌꺼기등이 많이 끼어있을지도 모릅니다. ^^; 너그럽게 봐 주시고, 어쨌든 빨랑빨랑 진도를 나가는 방향으로 해 보겠습니다. 목표는 3D 게임 엔진 …

2004.01
10

[App 개발] NeHe Lesson 10

이 예제는 Lionel Brits가 만들었습니다. 여기서는 코드의 어떤 부분이 추가되었는지만 설명하고 있기 때문에 이 글에서 소개하는 코드만 가지고는 프로그램이 동작하지 않을 것입니다. 만약에 어떤 부분에 어떻게 코드가 첨가되었는지 알고 싶으시면 소스…

2004.01
09

[App 개발] NeHe Lesson 9

9번 강좌까지 오신 여러분 수고가 많습니다. 본 코스는… 쿨럭~ ㅡㅡ; 지금까지의 공부를 통해서 OpenGL윈도우를 여는 것부터 시작해서 광원과 투명처리를 한 텍스쳐 물체를 회전시키는 것까지, OpenGL에 대하여 많은 이해가 있으셨을 것입니다. 이번…

2004.01
08

[App 개발] NeHe Lesson 8

투명 OpenGL의 많은 특수 효과들은 블렌딩 기능을 이용합니다. 블렌딩이란 기존에 그려져 있는 픽셀과 새로 그리는 픽셀의 색상을 섞는 일입니다. 어떻게 색상을 섞는가는 색상의 alpha값과 블렌딩 함수에 따라 달라집니다. alpha값이란 색상을…

2004.01
07

[App 개발] NeHe Lesson 7

원문이 윈도우 소스를 기준으로 서술되어 있어서 많은 부분이 바뀌어 있습니다. 특히 키보드 입력 부분은 제가 따로 첨부하는 소스를 참조하시는 것이 더 나을 것입니다. (사실 소스를 잘 만들진 못했습니다. 대충 돌아가게만... ^^;;;) 그래도 없는 것…

2004.01
06

[App 개발] Carbon과 Cocoa중에서 어떤 것을 선택할까?

저는 C/C++ 프로그래머입니다. 옛날 터보씨 시절부터 C를 썼기 때문에 사실 이것을 고치기가 쉽지 않습니다. 자바 프로그래밍은 밥먹고 사는 문제 때문에 프로젝트를 하면서 배우게 되었습니다. 처음에는 C++의 개념을 갖고 접근하는 바람에 많이 헤매었는…

2004.01
05

[App 개발] NeHe Lesson 6

텍스쳐 매핑을 배우면 여러가지 잇점이 있습니다. 만약 화면을 가로질러 날아가는 미사일을 표현한다고 합시다. 지금까지 배운 것을 토대로 하자면 미사일 전체를 형형색색의 다각형을 모아서 만들어야만 합니다. 텍스쳐 매핑을 사용한다면 진짜 미사일 사진 한 장…

2004.01
04

[App 개발] NeHe Lesson 5

오늘은 지난 시간의 프로그램을 확장하여 3차원 공간에 2차원 물체 대신 3차원 물체를 만들어 보도록 하겠습니다. 삼각형 의 왼쪽, 오른쪽, 뒤쪽 면을 덧붙이고, 사각형에는 왼쪽, 오른쪽, 뒷면, 밑면을 덧붙일 것입니다. 그리고 나면 삼각형은 피라밋 모…

2003.12
30

[App 개발] NeHe Lesson 4

지난시간에는 삼각형과 사각형에 색상을 입히는 것을 배웠습니다. 오늘은 이 도형들을 축을 기준으로 회전하도록 만들겠습니다. 지난 시간에 썼던 코드에 몇 가지만 추가하면 됩니다. 밑에는 전체 코드를 기록할 것이기 때문에 어떤 부분이 추가되었고 어떤 부분…

2003.12
28

[App 개발] NeHe Lesson 3

지난 시간에는 삼각형과 사각형을 화면에 출력하는 것을 배웠습니다. 오늘은 도형에 색상을 입하는 두 가지 방법에 대해서 배울 것입니다. Flat Coloring으로 사각형을 단색으로 칠할 것이고, Smooth Coloring으로 삼각형의 꼭지점에 각각 …

2003.12
27

[App 개발] NeHe Lesson 2

원래는 Lesson 1부터 해야 하는데, 이미 살펴보신 분은 아시겠습니다만, 윈도우 여는 방법 설명이 반 이상입니다. MUG 게시판에 디바이스 컨텍스트가 어쩌고 저쩌고 설명하고 있으면 짜증나시겠죠 ^^; 빠진 부분은 나중에 다루어질 것으로 믿고, Le…

2003.12
26

[App 개발] NeHe Tutorial 따라가기 (0)

OpenGL 사이트 중에서 꽤 명성이 있는 NeHe 프로젝트의 튜토리얼을 따라가 보려고 합니다. 저는 지금까지 Win32와 DirectX 프로그래밍을 주로 해 왔고, 따라서 매킨토시의 Xcode도 처음이고, OpenGL도 처음입니다. 저 혼자 공부하는…