posted by 아겔-_- 2009.03.30 00:12

팩터에서 모든것은 객체다.

모든것이 객체라는 선언이 별다를것도 없다고 생각할 수 있지만, 요즘 세상에서 화두가 되는 몇가지를 생각해보자.

스몰톡, 루비, Io와 같은 언어들에서는 모든것이 객체다. 이런 언어에서 모든 primitve들도 모두 객체를 다루듯이 메시지를 보내고, 자유롭게 변수에 할달하고한다. 심지어 객체라고 생각하기 힘든것들도 객체로 표현한다. 코드, 코드블럭, 메서드, 클래스, 메타 클래스, 메시지, 심지어 코드의 실행상태(continuations)까지.

그러면 그렇지 않은것은 뭘까? 모든것이 객체가 아닌것? 그게뭐지? 그건 좀 아닌것 같은데. 조금 범위를 좁혀보면, "몇몇것은 객체가 아닌것"이라고 생각할수있겠다.

자바와 C#은 객체지향언어임에는 변함이 없겠지만 몇몇은 객체가 아니다.(혹은 아니었다.) 자바에서 "int x"와 "Integer x"은 서로 다르다. 컴파일러와 API적인 지원으로 갭을 메우지만, 여전히 서로 다른것으로 취급함을 주의해야하고 boxing/unboxing이 '세심한 배려'라고 그냥 생각하며 사용하는게 속편하다.

"모든것이 객체"라는 명제가 객체지향에만 국한되는것은 아닌것 같다.(조금 뜬금없을수도있고, 결벽적으로 접근한다면 다른 영역에 해당할수도있겠지만)

값(value)을 다루는 방법에 대한것이기도 하다고 생각한다.

예를 들어, 스킴(Scheme)에서 객체지향에 대한 지원이 없더라도(클래스를 만들고, 인스턴스를 만들고 메서드를 구현하고...), 분명 그 언어에서는 다양한 타입(클래스)의 객체를 지원한다.(벡터, 문자, 정수, 함수...) 그리고 이런 객체(값)들은 모두 하나의 방법을 통해서 변수에 대입할수있고 모두 똑같은 방식으로 그 변수에 접근할수있음을 생각해보자. (굳이 스킴이 아니라고 하더라도.)

서론이 길었다. 팩터에서는 양쪽 모두에 해당한다.

모든값은 어떤 클래스에 속하고, 상속이 가능하며, 추가적인 메서드를 붙이거나 할 수 있는 '객체'이고, 모든 객체들은 동일한 방법으로 접근이 가능하다.




신고

티스토리 툴바