<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=AndreaSmalltalkLecture%3AQnA_06</id>
	<title>AndreaSmalltalkLecture:QnA 06 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=AndreaSmalltalkLecture%3AQnA_06"/>
	<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=AndreaSmalltalkLecture:QnA_06&amp;action=history"/>
	<updated>2026-04-20T09:26:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://workspace.onionmixer.net/wiki/index.php?title=AndreaSmalltalkLecture:QnA_06&amp;diff=751&amp;oldid=prev</id>
		<title>Onionmixer at 15:02, 5 December 2013</title>
		<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=AndreaSmalltalkLecture:QnA_06&amp;diff=751&amp;oldid=prev"/>
		<updated>2013-12-05T15:02:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;질문과 답변-6::Framework(짜임새)&lt;br /&gt;
&lt;br /&gt;
==Framework(짜임새)==&lt;br /&gt;
&lt;br /&gt;
안녕하세요? 김찬홍 안드레아입니다. 아래 성윤님께서 짜임새에 대해서 답변을 해 주셨습니다. 정말 감사하구요, 저도 이제 객체지향의 참 맛을 알아가려고 하는 찰라이기 때문에, 많이 모르는 것이 있습니다. 그러니 틀린 게 있다면 지적을 해 주세요.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Smalltalk는 객체지향 언어입니다. 그래서 Smalltalk의 모든 것은 객체입니다. 그래서 우리들이 Smalltalk에서 프로그래밍을 한다는 말은, 결국 Smalltalk 안에 들어있는 객체들을 이용해서 일을 하는 것입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
자, 여기에 디스켓이 있습니다. 이 디스켓은 한 덩어리의 객체로 되어있지 않고 여러 가지 작은 객체를 가지고 있습니다. 잘 보십시오.&lt;br /&gt;
&lt;br /&gt;
* 디스켓 겉 껍질&lt;br /&gt;
* 보호용 미닫이 철문&lt;br /&gt;
* 디스켓 앞판&lt;br /&gt;
* 디스켓 뒷판&lt;br /&gt;
* 쓰기방지 칸막이&lt;br /&gt;
* 디스크 원판&lt;br /&gt;
* 회전판&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
디스켓이라는 하나의 객체를 이루기 위해서는 위와 같이 여러 개의 작은 객체들이 모여야 합니다. 이런 객체들은 서로 나름대로의 역할을 가지고 있습니다. 그리고 각각의 객체들이 서로 의사소통을 하면서, 즉 객체들끼리 서로 지시를 주고 받으면서 일을 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그런데 디스켓을 구성하는 작은 객체들을 아무렇게나 배치한다고해서 디스켓이 되지는 않습니다. 바로 객체들을 일정한 틀에 맞도록, 즉 일정한 짜임새에 맞도록 배치해 주어야 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
짜임새(framework)란 바로 이러한 틀입니다. 여러 개의 객체들을 서로 조립해서 일을 처리해야할 때, 어떻게 이들 객체들을 조립해야 할지를 결정하는 것입니다. 자동차를 생각해 보면, 자동차에는 디스켓보다 훨씬 많은 객체들이 복잡하게 얽혀있는데, 이는 &amp;#039;자동차&amp;#039;를 구성하는 짜임새(framework)가 미리 정해져 있기 때문입니다. 집도 그렇고요... 아무튼 복잡한 일을 하기 위해서는 여러 개의 객체가 협동해서 일을 해야 한다는 것이 짜임새의 가장 중요한 이야기입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MVP(Model-View-Presenter) 짜임새는 Smalltalk를 사용해서 응용 프로그램을 만들때 필요한 짜임새입니다. MVP 짜임새는 크게 &amp;#039;모형&amp;#039;, &amp;#039;보임새&amp;#039;, &amp;#039;풀이꾼&amp;#039;의 세 무리의 객체가 조립된 형태입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;모형&amp;#039;(model)은 응용 프로그램 자체의 모형입니다. 흔히 &amp;#039;문제 영역&amp;#039;(domain model)이라고 부르기도 합니다. 프로그램의 핵심적인 논리가 이 모형 속에 집약되어 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;보임새&amp;#039;(view)는 프로그램의 겉모양입니다. 어떤 프로그램이던지 사용자와 대화를 해야하는데, 그 때 드러나는 프로그램의 겉 껍데기를 말합니다. 단추, 글줄 입력 상자 등은 모두 자신들의 창을 가지고 있는데, 이런 것들이 모두 보임새에 들어갑니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;풀이꾼&amp;#039;은 사용자와 대화하는 실제적인 부분으로, 마우스와 키보드에서 들어온 사용자의 입력을 받아서 모형(model)과 보임새(view)를 통제하여 전체적인 프로그램을 풀어가는 역할을 수행합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
비슷한 것으로는 성윤님께서 말씀하신 MFC 의 Doc/View 구조와 MVC가 있습니다. MVP 는 Dolphin Smalltalk에서 채택한 짜임새입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일단 MVP나 짜임새에 관한 것들은 객체지향에 대해. 그리고 Smalltalk에 대해 좀 더 공부한 뒤에 익히셔도 무리가 없을 것입니다. 언제가 될지는 모르겠지만, Smalltalk 배우기에서도 이러한 짜임새를 좀 다루어 볼 생각입니다. 그러기 위해서는 우선 기본에 충실해야 하기 때문에, 조금 더디더라도 Smalltalk에 대해서 충분히 깊이 있게 다루고자 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아무튼 여러분들께서 지치지 않게 좀 도와주시고요, 혹시나 제 글에서 틀린 부분이 있다면 서슴지 마시고 지적해 주십시오. 그래야 저도 공부를 해서 잘못된 것을 고칠 수 있기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그럼 객체지향 공부 열심히 하세요. 화이팅!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:AndreaSmalltalkLecture]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>