squeak에서의 Primitive

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:3.1#cite_ref-.EC.97.AD.EC.9E.90.EC.A3.BC2_1-0

 

이 부분을 검수하면서 어디선가 본거같은 생각이 불현듯 들어서 Pharo의 source를 좀 찾아보니 이런 구문이 보이네요.

<primitive: ‘primGetLocaleEncoding’ module: ‘ImmX11Plugin’>

 

흐음.. 그런데 아래의 link를 보면 이런식으로 번역이 되더란말입니다.

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:3.1#.ED.94.84.EB.A6.AC.EB.AF.B8.ED.8B.B0.EB.B8.8C

 

이 프리미티브 뒤에 오는 코드는 프리미티브 처리에 실패했을 경우에만 실행합니다.

 

흐음.. 이 다음의 코드는 사실 ^ nil 입니다만…. 다음의 코드가 의미하는게 ^ nil인지 아니면 module: 부분을 말하는건지.. 누가 좀 알려주실분 없나요…-.-;

squeak의 File List Tool과 pharo의 File Browser

생긴게 좀 틀려도 하는일은 같습니다.

squeak의 경우는 아래와 같죠.

Squeak FileIn
Squeak FileIn

 

Pharo의 경우는 World > Tool > File Browser를 실행하면 아래와같은창을 볼 수 있습니다

Pharo File browser
Pharo File browser

 

생김새는 좀 틀려도 하는일은 같습니다. 역시 이런건 형제가 맞는거같아요.

잘보면 Pharo쪽에는 상단부에 파일이름을 필터링해서 볼 수 있는 입력창이 하나가 추가되었습니다 😀

getter와 setter

객체지향 프로그래밍을 공부하다보면 반드시 등장하는 것중하나가 getter와 setter라는 것들입니다.

사실 정체는 단순히 메서드 입니다. 하지만 왜 이녀석이 굳이 언급이 되는걸까요?

 

SimpleSwitchMorph subclass: #SBECell
instanceVariableNames: ‘mouseAction’
classVariableNames: ”
poolDictionaries: ”
category: ‘SBE-Quinto’

 

이런식으로 Class를 선언한다고 하겠습니다. 이 Class는 내부에 인스턴스 변수로 mouseAction이라는것을 가지고 있죠.

이 변수에 직접적으로 접근을 할 수 있으면 그건 이미 에러!

 

물론 php의 경우는 SBECell.mouseAction = 3; 이런식의 문법이 가능하겠지만 사실 이건 틀린방법입니다.

Class는 선언시 캡슐화를 위해 private과 public을 구분해서 사용해야하며 (강제는 아니지만 개념상)

변수는 private에 들어가게 되어 외부에서 직접적으로 값을 바꿀 수 없어야 정상입니다.

 

그럼 private에 가지고있는 변수를어떻게 접근하는가?

이 변수의 값을 가져오는것을 getter. 이 변수에 값을 세팅하는것을 setter라고 합니다. (역시 개념상)

 

smalltalk에서는 이러한 getter와 setter를 선언하는데 규칙같은게 있는데

getter는 변수의 이름과 같은 메서드를, setter에는 변수이름에 콜론을 붙여서 선언하게 됩니다.

고로 이경우

mouseAction이라는 메서드는 getter(당연히 메서드를 쓰게되면 값이 return되니 콜론을 써서 인자를 넘길 필요는 없겠죠)

mouseAction: 이라는 메서드는 인자값을 넣어서 인스턴스 변수의 값을 변경할 수 있는 setter되겠습니다.

 

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:2.7

대략 이런내용에 대한 부연설명입니다만.. 좀 쓸모있는 설명이 되었으면 합니다 😀