객체지향의 꽃은 다형성(Polymorphism)이야.
추상화니, 캡슐화니, 상속이니 하는 것도 다형성을 지원하려고 존재할 뿐이랄까.
이론적인 말로 하자면, 하나의 호출 지점(Calling point)에 필요한 만큼의 진입지점(Entry point)을 설정할 수 있거든.
멋있지 않냐. 콜 하는 지점은 하나 밖에 없는데, 들어갈 수 있는 함수가 여러개라니. 이게 안멋있으면, 공부좀 더 해라.
그런데, 이 다형성이라는 게 꼭 객체지향 언어에서만 가능한 게 아니라는 거야.
내가 아는 한 가장 객체지향적인 프로그램은 바로 운영체제거든.
시스템 콜 호출 규약은 하나 밖에 없는데, 그 지점에서 호출되는 시스템 콜 함수는 200개가 넘어.
게다가 시스템 콜 쓰는 애들은 그 밑에 뭐가 있는지 잘 몰라. 심지어는 내가 시스템 콜을 쓰고 있는지도 모르고 있는 경우가 많지. 콜 하려는 함수 자체도 캡슐화 된 거랄까?
예를 들어, 가장 보편적인 printf(???) 요거 쓰면, 결국 호출되는게 write 시스템 콜이라는 걸 몰라. 아마 그 때 넘겨주는 파일 번호도 모를 걸?
비슷하지? 객체지향이랑.
간단하게 요약하자면, C로도 객체지향 구현할 수 있어. 상속? 컴포지션으로 구현하면 된다.
그런데, 이 객체지향의 꽃인 다형성이라는게 엄청난 약점을 갖고 있어.
바로, 분기 예측이 안된다는 거야.
아마, 펜티엄4가 망한게 파이프라인 때문이라는 걸 아는 사람은 알걸? 분기예측 실패할 때 비용이 파이프라인 숫자거든.
자바가 꽤 빨라졌다고는 하지만, 느릴 수 밖에 없는 이유도 비슷한데. 컴파일 시간에 다 해 놔도 느린 걸 실행 시간(Run time)에 하려니, 어떻게 되겠냐?
자.. 그런데, 순수 자바 보다 더 느린게 스크립트라는 거다.
태초에 지식을 나누고자 IT 못 배운 과학자들이 Markup Language 로 어설프게 만들어 낸게 HTML로 돌아가는 WWW이야.
프린터나 알아먹으라고 만들어 낸 언어로 망을 구현한 거지. 어쩌겠어, 걔들은 못배운 애들인데. 물론, 그걸 미리 선도하지 못한 책임은 우리들에게 있고.
보통 IT 똑바로 배운 사람이었다면, ML로 뭘 만들어 낼 생각 안할 거야. 차라리 언어를 새로 만들고 말지.
아무튼, 그래도 그 ML을 좀 보완해보려고 나온게 스크립트야.
글쎄, 사실 HTML5는 내가 잘 몰라서 그런데,
아무리 그래도, 스크립트에다가 컴파일러를 갖다 붙일 생각하는 사람이 똑바로 배운 사람 같지는 않다.
결론은.
1. 객체지향의 본질은 진입지점과 호출 지점을 적절히 설정하는 데 있다.
2. 언어만 갖고 놀려면 딴 생각 하지 말고, 그거나 해라.
3. 시스템 손 대고 싶으면, 운영체제부터 파 봐라.
4. 막연히 '이러면 좀 낫지 않을까?' 싶은 무언가 있다면, 대게 그게 낫지 않은 이유가 존재한다.
응 옛날 책 더 보고 와
응 안궁금 - dc App
내가 추천 눌러줬음 좋은 내용임. "스크립트에다가 컴파일러를 갖다 붙일 생각하는 사람이 똑바로 배운 사람 같지는 않다." 이것만 제외하면 말야. 글을 보면 속도측면만 생각하는데 스트립트의 기능 확장을 위해 ffi는 유용하다. 웹에서는 그러나 부적당한 이유는 보안문제와 특정 아키텍쳐에 종속되는 문제이다.
객체지향은 객체를 중심으로 프로그램을 organize하는 기법이고 객체는 클래스라는 타입을 가질 수 있다. 근데 하나의 객체가 여러 개의 클래스를 가질 수 있으면 다형성 객체라고 부르는데 다형성은 객체지향 프로그래밍이 가질 수 있는 하나의 성질일 뿐이지 그게 전부는 아니지. 오히려 메세지 패싱같은게 객체지향의 본질에 더 가까울 듯 ㅋ
하나는 알고 둘은 모른다더니만. 이건 하나도 제대로 모르는 분인듯.
네 다음 다형성 이름만 가져온 SF 소설.
혹시 자바 사무원이신가요?
왜 개념글?
추천조작 오지구요
자바 다형성이 뭔 런타임도중이야.. 헛배웠네 이거
느린 이유는 가상머신 위에서 돌아가니까 느린거지
그럴싸하게 어려워보이는 말로 혹세무민 하는 글이네 ㅋㅋㅋㅋ - dc App
개솔ㅋㅋㅋ
스크립트에 대해 자세히는 모르는데 일단 까야겠노 ㅋㅋㅋ