2011년 10월 13일 목요일

p2) 자바가 포인터 밖에 없다고 해도...


사실 자바를 하시는 분은 다른 언어를 하면 안됩니다. 자바의 디자인 패턴들 훌륭한 것들이 많은데 거기까지 가지 않게 되기 때문입니다.

객체지향 개념이 상당히 훌륭한데 C, C++을 먼저 배우고 자바를 하게 되면 선입견에 사로 잡히게 됩니다. 그래서 스몰톡은 더 배우셔도

됩니다만 개인적인 욕심으로 C나 C++을 배우지는 마세요.

사실 자바에 포인터가 없다고 하는데 제가 볼때는 포인터 밖에 없습니다.

인스턴스라는 개념이 포인터죠. 클레스는 struct고(물론 C++에서는 struct를 객체라고 표현을 합니다.)

new를 하는 것이 malloc입니다.

그리고 Object 객체는 void형 포인터구요. 사실 대충 이렇다고 생각하신 분들은 많겠지만 저처럼 딱 집어서 말한걸 본 적은

없을 것 같습니다. 공부해보니 그렇습니다. 클레스라는 건 실재적으로 메모리상에 없으니까 못 쓰는 거고

static으로 선언된 건 미리 메모리에 new가 되어 있으니 쓸 수 있는 겁니다. 그러니까 static class안에는 static 멤버나

static 메써드가 들어가야 하는 거지요.

개념적으로 따져보고 C++에서 구현한걸 보면 다 그렇게 매칭이 되지만.

이렇게 생각하면 안된다는 것입니다.

사실 구현의 한계상 자바 VM도 null이 대입된 객체(가베지 컬렉션되는) 처리를 제대로 하지 못해서 메모리 단편화가 생긴다는

연구 결과도 있습니다. VM도 완벽하지 못하다는 것죠. 그리고 linear한 메모리에 소프트웨어가 메모리를 나눴는데

단편화가 생기는 것도 우습지요. 뭐 하드웨어 단도 아닌데... ^^

그리고 사실 객체가 호출되기 전에는 스스로 메시지를 서로 주고받는 따위의 일은 하지 않습니다. 사람 같은 객체로 따지고 보면

어떤 반응이 오기 전에 스스로 행동하는 것들이 있잖아요. 자바 객체가 완전히 스스로 움직이지는 않죠.

그러나 결론은

자바는 headfirst java의 내용처럼 자바식으로 생각해야 한다는 것입니다.

그래야 디자인 패턴으로 갔을 때 더 창의적인 생각이 나올 수 있습니다.

자연의 법칙이 전기의 법칙(API)을 만들었고, 전기의 API로 CPU의 API를 만들었고 CPU의 API로 어셈블리 API를 만들고

어셈블리 API로 여러 언어들을 구현하였고 그 위에 알고리즘과 디자인 패턴이 얻어졌습니다.

아래단은 힘들고 아름답지 못하니 위의 단을 공부합시당~
그래서 어플리케이션 개발자는 자부심이 있어야 한다는 것! 자바 개발자는 한눈 팔지 말고 자바만 할 겄!(참 안드로이드도)

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...