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

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