모든 것은 객체?
고등학교 졸업하고 나니, 후배들이 동아리 신입생 교육 문제에 대해 이야기하길래 문득 든 생각을 글로 적는다.
Java, Ruby 등의 튜토리얼의 서두에서 줄기차게 말하는 문장. 모든 것은 객체이다. 과연 Java, Ruby의 모든 것이 객체인가? OO를 처음 접하는 사람에게 그러한 설명은 어떠한 정보도 주지 않는다(난 저 문장을 처음 접했을 때 오히려 햇갈리기만 했다). 보다 정확한 설명을 한다면—거의 대부분의 것들이 객체이다, 라고 해야 한다. 하지만 이것으로도 부족하다.
나라면 보다 정확하면서도 구체적인 설명을 할 것이다. 프로그램은 데이터를 다루며, 아무개 언어에서는 그것들을 객체라고 부른다. 객체는 다음과 같은 일을 할 수 있다.
- 메서드(함수)의 인자로 전달될 수 있다.
- 변수에 대입(참조)될 수 있다.
언어에 따라서 아래와 같은 기능들을 추가할 수도 있겠지.
- (
receiver operator method형식의 구문을 지원할 경우) 메서드를 가질 수 있다. - (배열이나 리스트가 기본적으로 포함된 경우) 배열(리스트)에 포함될 수 있다.
- (클래스 기반일 경우) 실체화(instantiation)될 수 있다.
- (프로토타입 기반일 경우) 복제(clone)될 수 있다.
- (함수형 언어가 아닐 경우) 변할 수 있다.
아니면 반대로 위와 같은 것이 가능한 것을 객체라고 정의한다—라는 식으로 설명해도 좋을 것이다. 어떻든 간에 “모든 것은 객체다”라는 뜬금없는 설명보다는 백번 낫다.
덧. Io나 LISP의 경우 코드 자체도 객체(값)이다. Ruby는 어떤가? Python은 클래스도 객체이다. 그래서 인스턴스와 객체를 구분한다. Java는 어떤가? 난 Java나 Ruby 언어가 Pure OO라며 으시대는 꼴이 너무 싫다.

March 13th, 2007 at 9:36 PM
이렇게 생각해주셔서 감사합니다. 객체에 대해 명확하게 정리해주신 것 같습니다. 교육에 대해 논의할 때 참고하겠습니다.