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

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

linux상에서의 Pharo한글입력 도전기-시작

Pharo상에서의 한글 출력은 상당히 잘되어있습니다.

일단 다른 OS에서 작성한 pharo의 한글을 linux상에서 copy and paste해봤더니 한글이 제대로 잘 붙는군요.

그럼 한글 출력은 linux에서도 font만 맞춰주면 전혀 이상이 없다는거고……………..

그래서 AntiAliasing도 잘 먹고해서 방심하고있었는데.. linux에서는 한글 입력이 안되네?

정확히는 입력은 되는데 XIM에서 뭐가 넘어오는지를 똑바로 처리 못하는 상황이 되겠습니다.

예를들어 “가” 라는걸 pharo에서 입력하면 눈에 깨지는 글자가 나와도 그걸 복사해서 linux에 붙여넣으면 올바르게 “가” 라는 글자가 나와야 하는데

깨진글자가 그대로 linux의 편집기에서도 똑같이 깨지더군요.

이런 상황이라면 아마도 방법이 있을거야..라고 생각하고 찾기 시작했습니다.

immx11plugin search
immx11plugin search

 

 

Pharo의 finder를 열어서 이것저것 찾다보니 어라? 많이 보던 단어가 나오네?

selector면 method니까…. 분명 쓰는데가 있다는 얘기군….이라고 생각하고 찾기 시작.

방법을 인터넷에서 찾아보니 다음과같은 URL이 있습니다.

http://book.pharo-project.org/book/Tidbits/TipsAndTricks/HowToDebugPluginAbsence/?_s=i5cCoOHKgbE_259B&_k=_6D56-FFGv-jwNI7

호오.. 이렇게하면 로딩된 module을 찾을 수 있다는건가?

module list
module list

 

물론 do it 따위로 출력이 될리가 없겠죠. Print it을 이용해서 출력을 하면 다음과같은 결과가 나옵니다.

module_list_finish
module_list_finish

 

아.. 정말 보기 난잡하게 출력됐군요…. 볼성사납게 말입니다.

그래서 이걸 간단하게 메모장에서 정리를 해봤습니다.

‘ZipPlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘Matrix2x3Plugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘FloatArrayPlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘B2DPlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘BitBltPlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘FT2Plugin Freetype-Plugin-dtl.63 (e)’
‘LocalePlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘SecurityPlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘FilePlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘MiscPrimitivePlugin VMMaker-oscog-EstebanLorenzano.166 (i)’
‘LargeIntegers v1.5 VMMaker-oscog-EstebanLorenzano.166 (i)’

흠.. 그래 잘 로딩되어있군.. 흠흠……………………흠?

……………..야… ImmX11Plugin어디갔니? 뭔가 이상하다…… 그래서 Pharo one click의 소스디렉토리를 뒤졌더니

pharo module list
pharo module list

 

흠.. 그래 좋다.. 흠…………………………………….응?

플러그인이 디렉토리에 없어요……………..하하하

고로 로딩도 당연히 못함.

 

위에서 셀렉터들을 뒤지다가 본건데 unix나 linux상에서 X11을 이용해 Pharo를 돌리는경우 locale에 대한 정보등을 ImmX11Plugin module을 통해서 얻고 처리하는데

해당되는게 없으니 당연히 얻을 수 있는게 없어서 아무것도 안되는상황….

아마도 XIM에서 입력받는걸 걍 ansi로 처리해버리는게 아닌가 싶은데 말이죠…………………….

 

이제부터의 문제는 Pharo의 vm위에서가 아니라.. Pharo의 소스를 가져다가 plugin을 빌드하고 그걸 넣어주는 과정이 필요할듯합니다.

허 참….. 애매하군요…. 소스를 좀 찾아서 한참 봐야할듯한데……………….

문제는 Pharo자체는 32bit라는거………………….

…………………………………

하아…. 32bit gentoo를 빌드해서 거기서 라이브러리를 빌드한다음에 추출해서 넣어야할거같네요.

이 다음step하고나면 반드시 저장하고 짱박아놔야겠습니다…T.T

스크린샷 한장으로 보는 메소드 생성

메서드 생성

일단 까먹을까봐 주석을 달아 스샷을 올리기는 했습니다만..

사실 smalltalk의 기본 방향은 주석을 가능한한 쓰지 않는거죠 😀

그래도 이런거 하나 해놓으면 나중에 도움될거같아 흔적삼아 남겨놓습니다.

여러분은 이러시면 안돼요 😀

 

아래의 주소를 참고로한 내용입니다.

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