SqueakByExample:8.5: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(용어수정)
 
(번역수정)
 
Line 1: Line 1:
==Boolean==
==Boolean==


Boolean 클래스는 스몰토크 언어가 클래스 라이브러리에 얼마나 많이 영향을 미쳤는지에 관한 아주 매력적인 통찰을 제공합니다. Boolean은 싱글턴 클래스 True와 False의 추상 상위 클래스입니다.  
Boolean 클래스는 스몰토크 언어가 얼마나 클래스 라이브러리에 강한 영향을 받는지에 대한 매우 흥미로운 예제입니다. Boolean 은 singleton 으로 구현한 클래스인 True 와 False 의 추상적 상위클래스입니다.
 
Boolean 의 대부분의 동작에 대해서는 ifTrue:ifFalse: 메서드를 자세히 살펴보면 이해할 수 있으며, 이 메서드는 인수로서 두 개의 블록을 요구합니다.


Boolean의 대부분의 동작은 메서드 ifTrue:ifFalse:를 고려함으로써 이해할 수 있으며, 이 메서드는 인수로서 두 개의 블록을 취합니다.
<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
(4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ]    ⇒    'bigger'
(4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ]    ⇒    'bigger'
</syntaxhighlight>
</syntaxhighlight>


[[image:BooleanHierarchy.png|none|747px|thumb|그림 8.3: Boolean 클래스 계층도 ]]


[[image:BooleanHierarchy.png|none|747px|thumb|그림 8.3: 메서드가 Boolean 속에서 추상적인인 Boolean 계층도 ]]


<strike>이것의 '''concrete subclasses'''에서의 실행은 모두 사소한 것들입니다.</strike>


이것의 '''concrete subclasses'''에서의 실행은 모두 사소한 것들입니다.
이 메서드는 Boolean 안의 추상메서드 입니다. 서브클래스에서 구현되어있는 내용은 대단히 간단합니다:


메서드 8.13: ifTrue:ifFalse:의 실행


메서드 8.13: ifTrue:ifFalse:의 실행
<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
True»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
True>>ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
   ↑trueAlternativeBlock value
   ↑trueAlternativeBlock value


False»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
False>>ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
   ↑falseAlternativeBlock value
   ↑falseAlternativeBlock value
</syntaxhighlight>
</syntaxhighlight>




사실 이것은 OOP의 진수(정수)입니다: 메시지가 오브젝트에 발송될 때, 오브젝트 자체가 어떤 메서드가 응답을 위해 사용되야 할지를 결정합니다. 이번 경우, False의 인스턴스가 false alternative를 평가하는 반면에, True의 인스턴스는 단순히 true althernative를 평가합니다. 모든 추상 Boolean 메서드는 True 또는 False를 위해 이러한 방식으로 실행됩니다. 예를 들어봅시다:
사실 이런것들이 OOP 의 진수입니다: 메시지를 객체에 전송할때, 객체 스스로 수신받은 메세지에 따라 어떤 메서드를 사용할지를 결정하게 됩니다. 이경우, False 의 인스턴스가 false 의 선택사항을 결정하며, True 의 인스턴스는 true 의 선택사항을 결정합니다. Boolean 의 모든 추상메서드는 True 와 False 가 이러한 방법으로 구현되고 있습니다. 예를 들어보면 아래와 같습니다:


메서드 8.14: negation 실행하기


메서드 8.14: negation 실행하기
<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
True»not
True>>not
   "Negation----answer false since the receiver is true."
   "Negation----answer false since the receiver is true."
   ↑false
   ↑false
Line 36: Line 38:




Boolean은 ifTrue:, ifFalse:, ifFalse:ifTrue와 같은 유용하고 편리한 메서드들을 제공합니다. 여러분이 만약 열심(eager)과 게으름(lazy) 논리곱(conjunction)과, 논리합(disjunctions) 사이에서 선택을 할 수 있습니다.
Boolean은 ifTrue:, ifFalse:, ifFalse:ifTrue 와 같은 유용하고 편리한 메서드들을 제공합니다. 그리고 eager lazy conjunction 과, disjunctions 사이에서 선택도 가능합니다.


{| style="border: 1px solid black;"
{| style="border: 1px solid black;"
Line 48: Line 50:




첫 번째 예에서, Boolean 종속표현식이 처리되었으며, 그 이유는 &Boolean 인수를 취하기 때문입니다. 두 번째와 세 번째 예시에서 오직 첫 번째 예시만 평가되었고, 그 이유는 and:가 그 자체의 인수로서 블록을 기대하기 때문입니다 블록은 첫 번째 인수가 true일 경우에만 평가됩니다.  
첫 번째 예제에서, & 양 옆의 Boolean 부분식 처리됩니다. 두 번째와 세 번째 예제에서는 and: 메서드가 인수로서 블록을 요구하기 때문에 결과적으로 좌측(수신자-receiver)만 처리됩니다. 우측(블록)은 첫 번째 인수가 true 인 경우에만 평가됩니다.  
 
 
{{CommentSqueak|and:와 or:가 어떻게 처리되는지를 예상해 보시기 바랍니다. {{Template:HighlightBold|Boolean}}에서 구현된 {{Template:HighlightBold|True}}와 {{Template:HighlightBold|False}}에서 실행(implementations)을 점검해 보시기 바랍니다..}}




{{CommentSqueak|and:와 or:가 어떻게 평가되는지를 상상해 보십시오. {{Template:HighlightBold|Boolean}}에서 구현된 {{Template:HighlightBold|True}}와 {{Template:HighlightBold|False}}에서 실행(implementations)을 점검해 보십시오.}}


==Notes==
==Notes==

Latest revision as of 13:59, 11 August 2013

Boolean

Boolean 클래스는 스몰토크 언어가 얼마나 클래스 라이브러리에 강한 영향을 받는지에 대한 매우 흥미로운 예제입니다. Boolean 은 singleton 으로 구현한 클래스인 True 와 False 의 추상적 상위클래스입니다.

Boolean 의 대부분의 동작에 대해서는 ifTrue:ifFalse: 메서드를 자세히 살펴보면 이해할 수 있으며, 이 메서드는 인수로서 두 개의 블록을 요구합니다.

(4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ]        'bigger'
그림 8.3: Boolean 클래스 계층도


이것의 concrete subclasses에서의 실행은 모두 사소한 것들입니다.

이 메서드는 Boolean 안의 추상메서드 입니다. 서브클래스에서 구현되어있는 내용은 대단히 간단합니다:

메서드 8.13: ifTrue:ifFalse:의 실행

True>>ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
  trueAlternativeBlock value

False>>ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
  falseAlternativeBlock value


사실 이런것들이 OOP 의 진수입니다: 메시지를 객체에 전송할때, 객체 스스로 수신받은 메세지에 따라 어떤 메서드를 사용할지를 결정하게 됩니다. 이경우, False 의 인스턴스가 false 의 선택사항을 결정하며, True 의 인스턴스는 true 의 선택사항을 결정합니다. Boolean 의 모든 추상메서드는 True 와 False 가 이러한 방법으로 구현되고 있습니다. 예를 들어보면 아래와 같습니다:

메서드 8.14: negation 실행하기

True>>not
  "Negation----answer false since the receiver is true."
  false


Boolean은 ifTrue:, ifFalse:, ifFalse:ifTrue 와 같은 유용하고 편리한 메서드들을 제공합니다. 그리고 eager 와 lazy conjunction 과, disjunctions 사이에서 선택도 가능합니다.

(1>2) & (3<4) ⇒ false "must evaluate both sides"
(1>2) and: [ 3<4 ] ⇒ false "only evaluate receiver"
(1>2) and: [ (1/0) > 0 ] ⇒ false "argument block is never evaluated, so no exception"


첫 번째 예제에서, & 양 옆의 Boolean 부분식 처리됩니다. 두 번째와 세 번째 예제에서는 and: 메서드가 인수로서 블록을 요구하기 때문에 결과적으로 좌측(수신자-receiver)만 처리됩니다. 우측(블록)은 첫 번째 인수가 true 인 경우에만 평가됩니다.


Squeak comment.pngand:와 or:가 어떻게 처리되는지를 예상해 보시기 바랍니다. Boolean에서 구현된 TrueFalse에서 실행(implementations)을 점검해 보시기 바랍니다..


Notes