저는 자바를 좋아하지 않는데요
우선 가상의 하드웨어(JVM)를 위한 코드를 만든다는 점이 양날의 검 같은거라고 봅니다.
다양한 하드웨어에서 호환성을 유지 한다는것 물론 엄청난 매력 이지요
하지만 실제로 native code 에 비해서 느릴수 밖에 없는 구조에서
구글을 포함안 안드로이드 진영이 자바를 선택 한데 대해 약간의 실망감이 없진 않습니다.
C언어는 원래가 시스템 프로그래밍을 위해 고안 되었고 가장 하드웨어에 적합한 언어라는걸
아실 텐데요 저는 이점이 애플이 가진 또 하나의 장점으로 생각 합니다.
애플 아이폰에선 ObjectiveC 라는 C언어에 객체지향성을 가진 플렛폼을 살짝 덧입힌 구조를
채택 하고 있습니다. C언어가 베이스다 보니 다양한 하드웨어구조에 소프트웨어를 맞추기가 어려워
소량의 제품에 완성도를 극대화한 전략을 추구 한다고 여겨 지구요,
아무튼 저도 한때 모바일 개발을 해본 경험상 퀄컴의 BREW가 C언어 베이스었고 SKVM이나 LG자바등
자바 베이스의 개발 하는 것도 봤지만 결과는 BREW가 훨씬 빠르고 효과적이구나 라고 고정 관념에
사로잡혀 있고 그것이 지금도 그다지 깨지지는 않는것 같습니다.
자바로 만든 어플리케이션이 휴대폰도 1Ghz를 넘나드는 지금의 환경에선 문제 되지 않는다라고 생각
하실 수도 있는데요
대부분의 모바일 CPU들은 PSP같은 MIPS 계열 또는 퀄컴 스넵드레곤 같은 ARM 계열 CPU로 양분 할수
있을것 같은데요. MIPS나 ARM 계열의 native code 를 직접 작성 하는것과 java byte code를 생성 해서
그것을 해석 하는 펌웨어를 탑제 하는것 또는 java byte code를 직접 해석하는 기능을 cpu에 내장한
Java Processor ( 실제로 10여가지의 Java Processor가 개발 되었음 )가 시도 되었지만
성능이나 가격 등에서 기존 CPU에 비해 많이 부족한것으로 앏니다.
자바의 컴파일 실행 과정을 살펴보면
-----------------------------------------------------------
outer:
for (int i = 2; i < 1000; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
continue outer;
}
System.out.println (i);
}
-----------------------------------------------------------
위의 코드를 자바로 컴파일하면 다음의 의미를 가지는 java byte code가 생성 됩니다.
-----------------------------------------------------------
0: iconst_2
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 44
9: iconst_2
10: istore_2
11: iload_2
12: iload_1
13: if_icmpge 31
16: iload_1
17: iload_2
18: irem
19: ifne 25
22: goto 38
25: iinc 2, 1
28: goto 11
31: getstatic #84; //Field java/lang/System.out:Ljava/io/PrintStream;
34: iload_1
35: invokevirtual #85; //Method java/io/PrintStream.println:(I)V
38: iinc 1, 1
41: goto 2
44: return
---------------------------------------------------------------
Java의 어셈블리 코드 같은 것인데요 위의 코드를 ARM 또는 MIPS cpu가 직접 해석 할수 있는
native assembly code로 변경 해서 실행 하는 구조 입니다.
아무래도 성능상 손해를 보게 될 것 같내요
그래서 최근 삼성이 바다라는 이상한 모바일 플렛폼을 만든것에 대해 불만이신 분도 계시겠지만
전 적어도 그것이 C언어 베이스 라는 점으로 인해 지금 당장은 애플이나 안드로이드 진영에 비해
보잘것 없다 해도 애플에 대항할 강력한 삼성의 무기가 될수도 있겠다 생각 했습니다.
잡담이 길었내요,.,.
|
가능성이란 확률 개념이라면야 모든게 가능하겠지만..
C언어 베이스의 쓰레기가 될 가능성이 크지 않을까요
북한도 리눅스기반 OS 개발(?) 하는데 7년정도 투자했다는 기사를 보면..
그 OS의 정체나 성능을 떠나서
오히려 남한보다 소프트웨어에 대한 인식이 발달된것 같습니다.