안녕하세요. 맨날 눈팅만 하다가 궁금한 것이 있어서 글을 올리게 되었습니다.
모바일에서 네이티브 크로스 플랫폼이란 것이 있길래 찾아봤는데
marmalade, uxplus 등등이 있는것 같았습니다.
runtimes을 제공하는 방식이랑 코드변환을 해주는 방식이 있었는데
marmalade 같은 경우는 c++와 marmalde api를 사용하면
원소스-멀티플랫폼이 가능하다 라고 써있는데요.(안드로이드, iOS, 윈폰등)
이게 도대체 무슨 원리로 가능한건지 좀 알고 싶습니다.
알려주시면 감사하겠습니다.... ㅡ ㅂ ㅡ/
1. objective-c는 C/C++의 슈퍼 셋(이미 포함되어 있는)이라서, C/C++로 코딩해도 됩니다.
2. 크로스 플랫폼의 환경은 각 OS마다 따로 설정을 해주는 것이 원칙이지만,
요즘은 워낙 이런 옵션에 대하여 신경써주는 툴이 많기 때문에 걱정하지 않으셔도 됩니다.
다만 하드웨어를 조작할 경우, OS에 대응하는 라이브러리를 따로 준비해야 할 수 있습니다.
3. 결정적으로 C/C++로 코딩할 경우, 크로스 플랫폼은 라이브러리의 공통 분모 기능만 작동하게 되어 있습니다.
예를 들면, 안드로이드의 블루투스 기능은 안드로이드에서만 사용이 가능하기 때문에 문제가 생기는데요.
왜냐하면 이것은 안드로이드에서만 쓰는 Activity라는 개념과 연관되서 코딩이 되어 있어요.
(JNI를 사용하면 Activity없이 사용할 수 있게 할 수 있습니다만, 노력과 시간이 좀 들지요.)
이것을 I-OS나 윈도우에 사용이 가능하게 할려면, I-OS용 블루투스 코드와 윈도우용 블루투스 코드를 따로 준비해야 합니다.
PS.> 원래는 이런 답변은 삽질을 좀 많이 해야 나옵니다.
굳이 모바일만이 아니라 전체적으로...
1. 래핑 등을 통한 API 제공 : 그 밑에 공통화 작업은 자기들이 해준다는 거죠... 공통분모에 해당하는 API를 뽑아 주고, UI 위젯을 각 OS별로 비슷하게 만들고 등등 해서 라이브러리로 만들 겁니다. Qt나 wxwidgets 뭐 등등이 있겠죠.
2. 코드 변환 : 기존 코드를 파싱 하거나, 별도의 문법을 사용해 작성 된 코드를 파싱하여 타겟 코드를 생성합니다.
3. VM : Java나 Air 같이 바이트 코드를 아예 별도의 VM에서 돌립니다. (물론 Air는 iOS 타겟으로는 코드 변환으로 앱이 만들어지긴 합니다.)
각자 한계점이 분명히 있습니다. 때문에 섞어서 쓰는 경우가 대부분일테고요, 특히 각 OS 특색에 맞는 UI가 제일 어렵겠죠.
(지금은 나아졌겠는데, 예전 Qt의 경우엔 한 플랫폼에서 레이아웃 배치하고 다른 플랫폼에서 확인 하면 레이아웃이 엉망이었습니다 -w-);
그래서 모바일쪽에선 보통은 OpenGL ES를 사용한 게임 같은 것을 만들 때 많이 쓸 것 같습니다.
여기까지 전부 그냥 제 생각입니다.
답글을 달아주셔서 감사합니다.
자료가 별로 없는것 같아서 내용을 이해사는데 애로사항이 좀 있었는데 많은 도움이 되었습니다. 좋은 하루 보내시길 바랍니다.
윈폰은 모르겠고 안드로이드, i-OS , 바다 플랫폼만 말씀드릴 게요.
안드로이드와 바다는 리눅스 계열이고 i-OS는 BSD (유닉스 계열)입니다.
안드로이드는 NDK라고 하여서 Java 껍데기 안에 C/C++로 프로그래밍이 가능하거든요. 바다는 원래 C/C++로 하게 되어 있고
i-OS도 Objective C 배울 필요 없다고 합니다. C/C++로 프로그램을 작성하여 컴파일 할 수 있죠.
그 다음은 하나의 프레임 워크(틀)을 만드는 것입니다. 그게 마멀레이드에 포함되어 있겠죠.
프레임 워크는 환경변수를 조사하여 컴파일러에게 다른 컴파일 조건을 제시합니다. 그러면 프레임워크에서 OS에 맞는 코드가
소스 별로 채택되며 이것은 순전히 프레임워크 내부의 코드입니다.
그 다음 마멀레이드로 컨텐츠를 구축하면 안드로이드 ,바다 , i-OS는 끝.
하지만 요즘 그래픽 칩은 종류가 많아서 마멀레이드 같은 common framework로는 다양한 효과가 어려울 겁니다.
공통 분모 부분만 이용하도록 API가 만들어져 있을 테니까요.
PS.> 원래는 이런 답변은 비쌉니다.^^;