smalltalk의 구분분석

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

 

이 내용을 진행하다 보면 나오는 예제를 가지고 조금 분해해서 살펴보도록 하겠습니다.

 

2 raisedTo: 1 + 3 factorial

 

참 간단한 문장이죠?

2 는 SmallInteger

raisedTo: 이건 Interger Class의셀렉터

1 은 SmallInteger

+ 는 Integer Class의 셀렉터

3은 SmallInteger

factorial은 Integer Class의 셀렉터

 

일단 숫자는 숫자타입의 클래스에 대한 instance

고로 숫자타입은 factorial이라는 selector를 가지고있다는 의미.

그런데 3의 class는 SmallInteger. 여기에는 factorial이라는 selector가 없습니다.

 

그래서 factorial을 이런저런 방법으로 찾아봤더니 SmallInteger의 부모Class인 Integer에 factorial이 있습니다. 아하.. 이런거구나…!

smalltalk factorial find
smalltalk factorial find 찾는방법에 대한 스크린샷

 

 

그럼 구조를 다시한번 분해를 해보자면

3이라는 인스턴스의 factorial이라는 셀렉터를 실행한 결과를

1 이라는 인스턴스의 + 라는 셀렉터에 인수로 넣고

이 결과를 다시 2라는 인스턴스의 raisedTo: 라는 셀렉터에 인수로 넣어주는거죠

따져보면 사실 간단한 역산이기는 한거같습니다만…

여기서 주제는 어디까지가 인스턴스이고 어디까지가 셀렉터인가를 구분할 줄 알고 셀렉터가 속한 클래스를 알아낸후 해당 문장에 대한 구조를 분석하는게 주 목적이니.. 이정도로 pass 😀