<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=VisualWorksTutorial1%3APage08</id>
	<title>VisualWorksTutorial1:Page08 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=VisualWorksTutorial1%3APage08"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=VisualWorksTutorial1:Page08&amp;action=history"/>
	<updated>2026-04-21T08:38:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=VisualWorksTutorial1:Page08&amp;diff=2679&amp;oldid=prev</id>
		<title>Onionmixer at 07:39, 21 December 2012</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=VisualWorksTutorial1:Page08&amp;diff=2679&amp;oldid=prev"/>
		<updated>2012-12-21T07:39:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:39, 21 December 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l271&quot;&gt;Line 271:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 271:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;24. 코드 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력 미스가 없다면 입력된 코드가 &quot;컴파일&quot;되어 {{HighlightBold|start}} 메서드가 메서드 창에 표시됩니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;24. 코드 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/ins&gt;}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력 미스가 없다면 입력된 코드가 &quot;컴파일&quot;되어 {{HighlightBold|start}} 메서드가 메서드 창에 표시됩니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=VisualWorksTutorial1:Page08&amp;diff=2678&amp;oldid=prev</id>
		<title>Onionmixer: VisualWorksTutorial1 page08 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=VisualWorksTutorial1:Page08&amp;diff=2678&amp;oldid=prev"/>
		<updated>2012-12-10T07:34:20Z</updated>

		<summary type="html">&lt;p&gt;VisualWorksTutorial1 page08 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{CincomTop|{{CincomSmalltalkHeadBanner|웹로그 통계 레슨 7|브라우저 기본강좌}}}}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: none; width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align:center;font-weight:bold; font-style: normal;font-size:110%;&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | | 목차 | 레슨6 | 레슨8 |&amp;lt;hr style=&amp;quot;color:black;background-color:black;height:4px;&amp;quot;&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageOpenbook}}&lt;br /&gt;
| 여태까지 {{HighlightBold|Workspace}}에서 기존의 Smalltalk 객체나 메서드를 사용해 실행해왔습니다. 하지만 진정한 의미에서 코드를 이용가치가 있게끔 만들고, Smalltalk 개발환경의 장점을 음미하기 위해서는 자신의 객체나 메서드를 작성할 필요가 있습니다.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageCertifacate}}&lt;br /&gt;
| {{CincomSmalltalkGreenBigFont|이 레슨에서는 자신의 패키지, 클래스, 프로토콜, 메서드를 작성하기 위한 시스템 브라우저의 사용법을 설명하겠습니다. 이 레슨에서 작성한, 디렉토리 지정된 로그파일에서 웹Hit를 표시하는 코드는 앞서 레슨에서 기술한 작업과 같습니다. 하지만 이번 코드는 보다 효율적으로 재이용 가능한 코드입니다.}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDesign}}&lt;br /&gt;
| 코드를 {{HighlightBold|Workspace}}에서 {{HighlightBold|System Browser}}(자신의 클래스나 메서드를 작성하는 곳)으로 이행시키기 위해서는, 몇 가지 기술이 필요합니다. 코드를 적절히 실행시키기 위해 필요한 기술입니다. 이 레슨에서는 그 기술에 대해 설명하겠습니다.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 1. VisualWorks {{HighlightBold|런쳐}}화면에 있는 {{HighlightBold|툴바}}에서 네 번째 버튼을 클릭, 혹은 {{HighlightBold|브라우저&amp;gt;&amp;gt;시스템}} 메뉴를 선택합니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig71.gif|none|549px|thumb|그림 7-1. 툴바의 시스템 브라우저 버튼]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig72.gif|none|637px|thumb|그림 7-2. 시스템 브라우저]]&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|{{HighlightBold|System Browser}}라는 타이틀 화면이 표시됩니다. 아직 이 화면을 모르실 것이라 생각합니다만, Smalltalk 개발환경 가운데 자유롭게 사용할 수 있는 매우 강력할 도구 중 한 가지입니다. 닮지 않았을지도 모르겠습니다만, {{HighlightBold|System Browser}}는 IDE(Integrated Development Environment : 통합개발환경)이라 불리우며, 기타 다른 개발언어의 환경과 동등한 기능을 가집니다. 이것은 Smalltalk 개발자의 메인 툴로 사용됩니다. 매우 강력하고 다양한 기능을 지닌 툴이기에 전부 설명할 수 없으므로 다음 스텝으로 진행합시다. 만약 System Browser에 대해 자세히 알고싶은 분은 {{HighlightBold|System Browser}} 입문서를 참고해주십시오.}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| 입문서 : 시스템 브라우저&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
간단하게, {{HighlightBold|System Browser}}화면구성에 대해 설명하겠습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig73.gif|none|637px|thumb|그림 7-3. System Browser 화면 구성-순서대로 패키지(핸들), 클래스, 프로토콜, 메서드, 메서드코드영역]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
패키지나 프로토콜은 클래스나 메서드의 시스템을 구축(합치는)하는 구조입니다. 클래스가 어느 패키지에 속해있는지, 메서드가 어느 프로토콜에 속해있는지 익히기 위해서는 시간이 필요하니, 여기서 그런 걱정은 하지 맙시다. 이미 코딩할 준비는 되어있습니다만, 그 전에 또 한 가지 이해해야 할 구조가 있습니다. 그것은 {{HighlightBold|네임스페이스}}(Namespace)입니다.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageQuestion}}&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-style:normal;font-size:120%;&amp;quot;&amp;gt;네임스페이스란?&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HighlightBold|네임스페이스}}는 어려운 개념이기에 예를 들어 설명하겠습니다. 이곳에 빌딩이 있다고 가정하십시오.(이 빌딩에는 사람들이 요구하는 모든 것이 있습니다. 즉, Smalltalk 메서드의 라이브러리인 Smalltalk 이미지를 표현하고 있습니다.) 이 빌딩엔 사람이 들어갈 수 있습니다. 하지만 같은 이름을 가진 사람은 한 명밖에 못들어갑니다. 예를 들어, &amp;quot;{{HighlightBold|타로 씨}}&amp;quot;가 빌딩에 들어갈 수 있도록 허가를 받았습니다. 하지만 또 다른 &amp;quot;{{HighlightBold|타로 씨}}&amp;quot;는 들어갈 수 없습니다. 두 번째 &amp;quot;{{HighlightBold|타로 씨}}&amp;quot;가 빌딩에 들어가면 문제가 발생합니다. 왜냐하면 &amp;quot;{{HighlightBold|하나코 씨}}&amp;quot;가 빌딩에 들어와서 말했습니다. &amp;quot;{{HighlightBold|타로 씨}}! 점심 먹으러 가요.&amp;quot; 그녀는 어떤 &amp;quot;{{HighlightBold|타로 씨}}&amp;quot;를 말한 것일까요?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
여기서 해결책을 제시하겠습니다. 이 빌딩에는 필요한 만큼 방을 만들 수가 있습니다. 지금, {{HighlightBold|하나코 씨}}는 다음과 같이 {{HighlightBold|타로 씨}}에게 권유할 수 있습니다. &amp;quot;101호실에 계신 타로씨. 점심 먹으러 가요.&amp;quot; 이로써 충돌을 피할 수 있게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그러면 실제로 Smalltalk에 이미지(클래스 라이브러리)에서는 어떻게 구성 될까요. 기존(제공된) 클래스나 새로운 클래스를 전부 지니고 있는 것이 아닌, 같은 빌딩(방 한 개)에 거실을 만들고, 분할된 방({{HighlightBold|네임스페이스}})에 분리합니다. 자신의 클래스를 생성할 때, 방(네임스페이스)를 분할해서 작성 하는 것을 강력히 권장합니다. 그 이유는 간단합니다. 클래스에 독자적인 이름이 붙기 때문에, 다른 프로그램이 전혀 다른 동작을 할지도 모르는 클래스와 같은 이름을 사용하고 있을 가능성이 있습니다. 이것을 충돌이라 부릅니다. 때문에 옛날에는 {{HighlightBold|충돌}}을 피하기 위해 &amp;quot;접두어&amp;quot; 네이밍 규약을 사용했습니다. 이러면 재이용에 지장을 초래하기 때문에 네임스페이스가 발명되었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그렇기에, 클래스를 작성하기 전에, 작성한 클래스가 속한 네임스페이스를 맨 처음 작성할 필요가 있습니다. 이 튜토리얼에서는 범위 밖이므로 네임스페이스는 작성하지 않습니다. 기존의 네임스페이스에 클래스를 추사합니다. 그것을 사용하는 네임스페이스는 {{HighlightBold|Smalltalk}}입니다.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 2. {{HighlightBold|System Browser}}를 닫았을 경우엔 열어주십시오. 우선 작성한 클래스나 메서드를 포함하게될  {{HighlightBold|패키지}}를 작성합니다. {{HighlightBold|패키지}} 창에서 적당한 패키지 이름을 클릭합니다. 카테고리 일람의 적당한 카테고리를 클릭해주십시오. 그리고 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|신규 패키지...}}를 선택해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig73a.gif|none|641px|thumb|그림 7-4. System Browser와 패키지 작성 메뉴]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. 표시된 패키지명 작성 다이얼로그에 {{HighlightBold|WebLogStats}}를 입력합니다. 그리고 OK 버튼을 클릭합니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig73b.gif|none|406px|thumb|그림 7-5. 패키지 작성 다이얼로그]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. 작성이 완료되면 자동적으로 WeWLogStats 카테고리가 선택됩니다. 선택되지 않은 경우에는 선택해주십시오. {{HighlightBold|System Browser}}가 아래 그림과 같이 표시된 것을 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig73c.gif|none|644px|thumb|그림 7-6. System Browser와 WebLogStats 패키지]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. 다음은 클래스를 작성하겠습니다. 메서드 코드 에리어를 수정해서 클래스를 작성할 수 있습니다만, 여기서는 새롭게 추가된 클래스 작성 툴을 사용하겠습니다. 우선, WebLogStats 패키지가 선택된 것을 확인합니다. 그리고, {{HighlightBold|클래스}} 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|신규 클래스...}}를 선택합니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig73d.png|none|641px|thumb|그림 7-7. System Browser와 신규 클래스 템플레이트]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. 클래스 작성 도구가 표시됩니다. 클래스명, 인스턴스 변수를 기술합니다. 아래쪽 체크박스는 체크된 상태로 둡니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_classDialog1.gif|none|466px|thumb|그림 7-8. 클래스 작성지원 툴.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. {{HighlightBold|OK}}를 클릭해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|{{HighlightBold|OK}}를 선택한 경우, 타이핑 미스가 없으면 입력한 값이나 설정(클래스 작성 코드)가 &amp;quot;컴파일&amp;quot;되어 {{HighlightBold|WebLogClass}}가 WebLogStats 패키지 일람에 표시됩니다. 아래 그림과 같이 표시됩니다.}}&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig75.gif|none|644px|thumb|그림 7-9. 새로운 패키지(WebLogStats)와 새로운 클래스 WebLogClass]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|클래스명과 패키지명을 살짝 다른 이름으로 한 것은 구분하기 쉽게 하기 위함입니다. {{HighlightBold|WebLogClass}}를 클래스로 인식할 필요는 없습니다.({{HighlightBold|WebLog}}를 사용하면 일부러 클래스라는 것을 확인할 필요가 없습니다.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|{{HighlightBold|instanceVariableNames}} 행을 주목해주십시오. 클래스 작성 툴에서 지정한 인스턴스 변수가 있습니다. 변수에 값을 설정하면 객체가 존속되는 동안은 값이 영구히 유지됩니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. WebLogClass(클래스)를 클릭후 반전시키고, 프로토콜 창 위에 있는 클래스 탭을 클릭해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. 그리고 프로토콜 창에서 {{HighlightBold|instance creation}}을 선택 후 메서드 창에서 {{HighlightBold|new}}를 선택합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림처럼 된 것을 확인해주십시오. 앞서 툴에서 {{HighlightBold|initializer}}가 체크되어 있었기 때문에, 인스턴스 생성 메서드가 자동적으로 작성되었습니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig77.gif|none|644px|thumb|그림 7-10. 자동생성된 메서드(new)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| &amp;quot;^super new initiaize&amp;quot;는 무슨 의미인가요? 입문서 : super&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 10. 프로토콜 창 위에 있는 {{HighlightBold|instance}} 탭을 클릭해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|클래스 정의 텍스트가 표시됩니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11. 프로토콜 창에서 {{HighlightBold|initialize-release}}를 선택하고, 메서드 창에서 {{HighlightBold|initialize}}를 선택합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림과 같이 된 것을 확인해주십시오. 이 메서드도 앞서 툴에서 {{HighlightBold|initializer}}가 체크되어 있었기 때문에, 인스턴스 초기화 메서드가 자동적으로 작성되었습니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig78.gif|none|653px|thumb|그림 7-11. 자동 생성된 initialize 메서드]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12. 메서드 코드 뷰의 텍스트를 다음과 같이 바꿔주십시오.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
initialize &lt;br /&gt;
&amp;quot;initialize the WebLogClass. Set the logDirectory variable.&amp;quot; &lt;br /&gt;
logDirectory := &amp;#039;c:\vw7.7\image&amp;#039;.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|{{HighlightBold|Initialize}} 메서드는 {{HighlightBold|initialize-relrease}}에 속해있는 인스턴스 초기화용 공통 메서드 중 하나입니다. 때문에, 로그파일이 존재하는 디렉토리를 인스턴스 변수 값으로 설정하는 딱 좋은 메서드입니다.(이 코드는 다른 곳에서는 올바르게 동작하지 않습니다.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13. 사용환경에 따라서 {{HighlightBold|c:\vw7.7\image}} 문자열을 실제 로그파일이 격납되어있는 디렉토리로 변경할 필요가 있을 수 있습니다. 코드 뷰에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|Accept}}를 선택해주십시오. 타이핑 미스가 없다면 입력한 코드가 &amp;quot;컴파일&amp;quot;되서 {{HighlightBold|initialize}} 메서드가 메서드 창에 표시됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림에서 디렉토리 문자열을 제외한 나머지 부분이 같은지 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig79.gif|none|653px|thumb|그림 7-12. 브라우서에 표시된 메서드(initialize)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14. 프로토콜 창 위에 있는 {{HighlightBold|Instance}} 탭이 다시 선택되어 있는 것을 확인해주십시오. 그리고 프로토콜 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}을 해주십시오. {{HighlightBold|신규...}}를 선택합니다. 새로운 프로토콜 이름 입력을 요구하는 다이얼로그가 표시됩니다. {{HighlightBold|testing}}을 입력하고 OK를 클릭해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|메서드를 생성하기 위한 &amp;quot;템플릿&amp;quot;이 표시됩니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15. 메서드 코드 뷰의 텍스트를 다음과 같이 바꿔주십시오.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
viewDirectory &lt;br /&gt;
| workingDir contents | &lt;br /&gt;
workingDir := logDirectory asFilename. &lt;br /&gt;
contents := workingDir directoryContents. &lt;br /&gt;
contents do: [ :each | Transcript show: each printString; cr. ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16. 코드 뷰에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력 미스가 없다면 입력된 코드가 &amp;quot;컴파일&amp;quot; 되어서 {{HighlightBold|viewDirectory}} 메서드가 메서드 창에 표시됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림과 같은지 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7a.gif|none|653px|thumb|그림 7-13. 브라우저에 표시된 새로운 메서드(viewDirectory)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| 17. {{HighlightBold|Workspace}}를 열고 {{HighlightBold|WebLogClass new viewDirectory}}를 입력하고 실행을 선택해주십시오. 이전에 했던 것 과 같이 {{HighlightBold|Transcript}} 표시가 가능한 것을 확인해주십시오.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 18. 프로토콜 창 위에 있는 {{HighlightBold|Instance}} 탭이 선택되어 있는 것을 확인해주십시오. 그리고 프로토콜 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}을 해주십시오. {{HighlightBold|신규...}}를 선택합니다. 새로운 프로토콜명 입력을 요구하는 다이얼로그가 표시됩니다. {{HighlightBold|Private}}를 입력하고 OK를 클릭해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|메서드를 생성하기 위한 &amp;quot;템플릿&amp;quot;이 표시됩니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19. 메서드 코드 뷰의 텍스트를 다음과 같이 바꿔주십시오.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
showHits: aFile &lt;br /&gt;
&lt;br /&gt;
| myFile myStream myLine addrIP mySet | &lt;br /&gt;
mySet := Set new. &lt;br /&gt;
myFile := (logDirectory, &amp;#039;\&amp;#039;, aFile) asFilename. &lt;br /&gt;
myStream := myFile readStream. &lt;br /&gt;
[ myStream atEnd ] whileFalse: &lt;br /&gt;
[myLine := myStream upTo: Character cr. &lt;br /&gt;
addrIP := myLine copyUpTo: $,. &lt;br /&gt;
mySet add: addrIP.]. &lt;br /&gt;
myStream close. &lt;br /&gt;
^mySet size.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20. 코드 뷰에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력 미스가 없다면 입력된 코드가 &amp;quot;컴파일&amp;quot;되서 {{HighlightBold|showHits}} 메서드가 메서드 팡에 표시됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림과 같은지 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7b.gif|none|653px|thumb|그림 7-14. 브라우저에 표시된 새로운 메서드(showHits)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| Smalltalk의 메서드는 다른 언어에서 말하는 서브 루틴이나 함수와 같은 것입니다. COBOL 언어에서는 &amp;quot;프로시저&amp;quot;라 불리우며, BASIC에서는 &amp;quot;SUB 등&amp;quot;입니다. 하지만 &amp;quot;함수&amp;quot;라는 용어는 루틴이 리턴되거나 값을 되돌리거나 할때에 일반적으로 사용됩니다. Smalltalk에서 무언가 &amp;quot;반환&amp;quot;하고 싶을 때 캐럿 기호(^)(원고 등에서 사용되는 탈자기호)를 사용합니다.&lt;br /&gt;
&lt;br /&gt;
캐럿리턴을 사용하는 식이 있는 경우, 항상 맨 처음에 식 전체가 평가되는 것을 기억해 두십시오. 실제 &amp;quot;반환&amp;quot;되는 것은 맨 마지막에 평가된 것입니다. 따라서 {{HighlightBold|^mySet size}}와 같은 식에서 Smalltalk는 {{HighlightBold|mySet size}}(아마 {{HighlightBold|Smallinteger}} 인스턴스를 생성)를 평가하고, 이 메서드가 호출된 객체에 그 결과를 돌려줍니다.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDesign}}&lt;br /&gt;
| Smalltalk에서는 정해진 코드(인덴트, 개행, 코드블록 등)의 포맷이 없습니다. 자유로운 포맷으로 쓸 수 있습니다. 하지만 VisualWorks를 사용함에 있어, 사실상 표준은 존재합니다. 브라우저는 자동포맷 기능을 가지고 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
코드 뷰에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|Format}}을 선택해주십시오. 사실상 표준 포맷에 따라 코드를 &amp;quot;포맷&amp;quot;합니다.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7c.png|none|653px|thumb|그림 7-15. &amp;lt;오퍼레이트 메뉴&amp;gt;에서 포맷 항목]]&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7d.gif|none|648px|thumb|그림 7-16. Smalltalk 표준 포맷의 코드]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 21. {{HighlightBold|private}}프로토콜이 선택된 상태에서 코드 뷰의 텍스트를 다음과 같이 바꿔주십시오.({{HighlightBold|showHits}} 메서드를 덮어써도 문제는 없습니다. 이미 코드는 메모리에 보존되어 있습니다.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
getLogFiles &lt;br /&gt;
&lt;br /&gt;
| workingDir contents xFound count | &lt;br /&gt;
workingDir := logDirectory asFilename. &lt;br /&gt;
contents := workingDir directoryContents. &lt;br /&gt;
contents do: [ :each | &lt;br /&gt;
xFound := each findString: filter startingAt: 1. &lt;br /&gt;
xFound &amp;gt; 0 &lt;br /&gt;
ifTrue:[ count := self showHits: each. &lt;br /&gt;
Transcript show: each, &amp;#039; . . . &amp;#039;, (count printString); cr. ]. &lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|단순한(합성되지 않은) &amp;quot;필터&amp;quot;로직으로 되돌렸습니다. ws00으로 시작하는 파일만 로그파일이기 때문에, ws00으로 시작하는 파일을 검색하도록 해야 합니다. Filter가 초기화될 때, 어떻게 해야 좋을지 아실겁니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. 코드 뷰에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력미스가 없다면 입력된 코드가 &amp;quot;컴파일&amp;quot;되어서 {{HighlightBold|getLogFiles}} 메서드가 메서드 창에 표시됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림과 같은지 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7e.png|none|648px|thumb|그림 7-17. 브라우저에 표시된 새로운 메서드(getLogFiles)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| 잠시 기다려주십시오. 코드 가운데 여태껏 본 적 없는 새로운 것이 있습니다. – self, 대체 무엇일까요?&amp;lt;br&amp;gt;&lt;br /&gt;
self를 자세히 알아보기.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageSteps}}&lt;br /&gt;
| 23. private 프로토콜이 선택된 상태에서 다음과 같이 코드 뷰에 있는 텍스트(getLogFiles 메서드)를 바꿔주십시오.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
start &lt;br /&gt;
&lt;br /&gt;
filter := (Dialog request: &amp;#039;フィルタを入力してください： &amp;#039; initialAnswer: &amp;#039;ws00&amp;#039;). &lt;br /&gt;
(filter size) &amp;gt; 0 &lt;br /&gt;
ifTrue: [self getLogFiles]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24. 코드 창에서 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}후 {{HighlightBold|Accept}}를 선택해주십시오. 입력 미스가 없다면 입력된 코드가 &amp;quot;컴파일&amp;quot;되어 {{HighlightBold|start}} 메서드가 메서드 창에 표시됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래 그림과 같은지 확인해주십시오.&lt;br /&gt;
&lt;br /&gt;
[[image:cincom_tutorial1_fig7f.png|none|648px|thumb|그림 7-18. 브라우저에 표시된 새로운 메서드(start)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25. {{HighlightBold|Workspace}}을 열고 다음과 같이 입력해주십시오.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
WebLogClass new start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
모든 텍스트를 반전시키고 {{HighlightBold|&amp;lt;오퍼레이트 클릭&amp;gt;}}후 {{HighlightBold|실행}}을 선택해주십시오.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CincomSmalltalkBlueFont|이 코드는 이전 레슨에서 실행했던 내용과 같은 실행결과를 얻을 수 있습니다.}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageDominos}}&lt;br /&gt;
| 잠시 기다려주십시오. 코드 가운데 여태껏 본 적 없는 새로운 것이 있습니다. - {{HighlightBold|self}}, 대체 무엇일까요?&amp;lt;br&amp;gt;&lt;br /&gt;
self를 자세히 알아보기.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;width:60px;float:left;&amp;quot; | {{HeadImageCertifacate}}&lt;br /&gt;
| &amp;lt;font style=&amp;quot;text-align:center;font-weight:bold; font-style: normal;font-size:110%;&amp;quot;&amp;gt;정리&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기나긴 워크샵이었습니다만, 그만한 가치가 있었다고 생각합니다. 카테고리 및 공통 프로토콜을 작성하기 위해서 &amp;quot;사전준비&amp;quot;작업을 해야했기 때문에 길다고 느끼셨을 겁니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음 레슨에서는 작업을 보존하기 위한 방법을 배우겠습니다. 다음 레슨 후에 기능적인 클래스를 추가하겠습니다. 그 클래스는 인기가 많은 웹페이지를 카운트 합니다.(즉, 매우 많은 Hit를 얻은 웹 페이지)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HighlightBold|아래와 같은 내용을 학습하였습니다}}&lt;br /&gt;
* 새로운 카테고리, 클래스, 프로토콜, 메서드를 생성하기 위한 {{HighlightBold|System Browser}}의 사용법&lt;br /&gt;
* 두 가지 메서드 타입(클래스와 인스턴스)&lt;br /&gt;
* Smalltalk에서 사실상 표준 코드 포맷&lt;br /&gt;
* 작업공간에서 객체의 테스트&lt;br /&gt;
|- style=&amp;quot;text-align:center;font-weight:bold; font-style: normal;font-size:120%;&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;hr style=&amp;quot;color:black;background-color:black;height:4px;&amp;quot;&amp;gt; | 목차 | 레슨6 | 레슨8 |&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>