프로그래밍/아이폰,아이패드

자바, iOS의 Object 와 id 에 대해

panpro 2011. 8. 27. 15:09
오랜만에 프로그래밍 관련 글을 쓰는군요. 

자바의 Object 나 iOS의 id에 대해 궁금해 하시는 분이 계셔서 글을 쓰게 되었습니다. ^^;

자바의 Object에 대해 먼저 설명하겠습니다.


Object는 클래스다.  

자바의 Object는 클래스입니다.

자바에는 무수히 많은 클래스가 있습니다. 거의 모든 걸 다 클래스로 만들어 놓았죠. 그래서 자바를 만든 제임스 고슬링의 별명이 "Every thing is classes" 라고 합니다. 이 말은 굳이 클래스로 만들지 않아도 될 것을 클래스로 다 만들어서 속도저하를 일으키고 있다는 걸 빗대고 있는 거라 생각되네요.

암튼. 자바에 무수히 많은 클래스가 있는데, 그 클래스들마다 공통으로, 반드시, 꼭 구현되어야  하는 기능들이 있습니다.

자동차를 예를 들어 보죠. 자동차는 반드시 가고, 서고, 방향 바꾸고. 이렇게 3가지 기능이 반드시 구현되어 있어야 합니다. 

자동차라는 게 종류도 많고 가격도 천차만별에 모양 색깔 기능.. 다 다른데, 반드시, 꼭 구현되어야  하는 기능들이 있습니다.
 




이런 식인거죠.

모든 자동차들은 가다, 서다, 방향기능을 꼭 가지고 있어야 합니다.

마찬가지로 자바의 클래스들도 꼭  가지고 있어야 하는 기능들이 있습니다.





그 클래스가 생성되고, 소멸되는 기능들, 그리고 그 클래스의 이름.. 기타 등등 모든 클래스들이 자바 클래스로서 갖추어야 할 기본 덕목들.. 아니 기본 기능들과 속성들이 있습니다.

이런 기능들을과 속성들을 학점 클래스 만들 때마다 구현해 주고, 학생 클래스 만들 때마다 다 구현해 줘야 할까요?
어떤 사람은 클래스의 이름을 위해 name 이라는 변수로 만들고, 어떤 사람은 _name, 어떤 사람은 Name, 어떤 사람은 m_classname.. 기타 등등.

사람마다 다 틀리게 만들어서 무지막지 혼란스러울 겁니다.

그래서 클래스 하나를 딱 정해놓고 기본적으로 필요한 기능과 속성들을 정리했죠.

그것이 바로 당신이 알고 싶어하는 바로 그 Object 클래스인 겁니다.


모든 자바 클래스는 Object 클래스를 상속받습니다. 

굳이 명시 안해도 이미 Object 클래스를 상속받았다고 간주됩니다.



Object는 최상위 클래스다. 그래서 대표성을 지닌다.
 


그런데, 이 Object 클래스에 한가지 더 재밌는게 있슴미다.

모든 클래스는 Object 클래스를 상속받는다고 했습니다.

그럼 여기에 이런 관계가 성립합니다.

학생 클래스는 Object 클래스다. (O)
Object 클래스는 학생 클래스다. (X)

잘 이해가 안되죠. 이 말은, 

한국사람은 사람이다. (O)
사람은 한국사람이다. (X)

이 관계와 같습니다.

[하위 클래스]는 [상위클래스]다. 는 성립하지만, 그 반대는 성립하지 않습니다.

만약 프로그래밍할 떄 저 반대가 성립하는 것처럼 프로그래밍하면(실제로 이렇게 하는 사람 있음. 형변화에 엄격하지 않은 Object Pascal에서 이렇게 하는게 가능함. ㅋ. 결과가 골때림. 그 자리에서 에러가 안나고 다른 자리에서 에러가 나기 떄문에 이거 일주일짜리 디버깅 꺼리임) 프로그램이 불규칙하게 죽는 현상이 발생할 수 있습니다. 

그래서 이게 가능합니다.

Object obj = 학생클래스 인스턴스;

반대는 성립하지 않습니다.  

이렇게 Object 클래스는 모든 클래스의 최상위 클래스로 대표성을 가지기 떄문에

Object 클래스의 인스턴스는 모든 클래스의 인스턴스를 받을 수 있습니다. 

Object obj = 학생클래스 인스턴스; (O)
Object obj = 교수클래스 인스턴스; (O)
Object obj = 학점클래스 인스턴스; (O)



그럼 iOS의  id는?

iOS의 id는 약간 개념이 다릅니다. 클래스가 아닌거죠.

그냥 변수입니다. 

C를 하셨던 분들은 다 아실만한 void * 인 겁니다.

그냥 포인터를 받는 변수입니다. 좀 길게 말하면 클래스 인스턴스의 주소를 저장하는 변수인거죠.

이 글이 마음에 드시면 아래 손꼬락을 꼬옥 눌러주세요. ^^