본문 바로가기

프로그래밍

j2objc - 자바로 아이폰 개발을 시작하다.

안드로이드는 자바로, 아이폰은 Object-C로 개발하는 것이 보통 정석입니다. 자바를 하는 사람이 많지만 자바로 아이폰을 개발할 수 없다는 것은 많은 자바 개발자들에게 큰 아픔이었을 겁니다. 자바 개발자들은 자바로 아이폰을 개발하고 싶다는 욕구가 생기기 시작했고, 그 결과로 최근에 구글에서는 자바를 Object-C로 변환해 주는 j2objc를 발표했습니다.

j2objc: http://google-opensource.blogspot.kr/2012/09/j2objc-java-to-ios-objective-c.html

j2objc- google code: http://code.google.com/p/j2objc/

자바 개발자들에게 있어 굉장한 희소식이 아닐 수 없습니다. 이제 Object-C를 배우지 않아도 아이폰을 개발 할 수 잇습니다! 면 얼마나 좋을까요? 아쉽지만 자바로 완벽한 아이폰 앱을 만들 수 없습니다. 아이폰 앱을 개발할 때는  iOS SDK를 사용해서 만들 수 밖에 없습니다. iOS SDK는 자바용 api가 제공되지 않기 때문에 자바로 만들 수가 없습니다. 그러나 iOS SDK를 쓰지 않고 코딩할 수 있는 부분들은 j2objc로 자바를 이용하여 코딩할 수 있습니다. 데이터 I/O나 로직같은 Non-GUI 부분은 자바로 한번 코딩만 하면 안드로이드, 아이폰, 웹(GWT를 이용하여) 에서 사용할 수 있게 되는 것입니다.

결론적으로 GUI 부분만 Object-C를 이용하여 코딩을 하고 나머지 대부분은 자바로 대체할 수 있게 됩니다. 만약 OpenGL로 GUI 부분을 처리하게 된다면 자바로 완전한 크로스플랫폼 코드를 만들어 낼 수도 있습니다. 그렇다고 해도 빌드는 맥 환경에서 XCode로 해야만 아이폰 앱을 만들 수 있습니다. 

j2objc는 대부분의 자바의 기능들을 지원하고 있습니다. 예외처리, 제네릭, 익명 클래스, 쓰레드 ,reflection등의 기능들도 지원하다고 되 있습니다. 왠만한 자바코드들은 무리없이 변환될 수 있을듯 합니다.

j2objc는 자바의 가비지콜랙터를 구현하기 위해 AutoReleasePools를 사용합니다.

AutoReleasePools: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

정확히 가바지콜랙터가 하는 일과 동일하지는 않고 조금 다르게 행동한다고 되어있습니다만, 자세히는 잘 모르겠습니다.

j2objc는 jni코드를 지원하지 않습니다. 대신에 GWT에서 사용하는것 과 같은 jsni를 제공하고 있습니다. jsni는 Object-C 코드를 자바 코드에 추가하는 식으로 동작하게 됩니다.

j2objc는 자바 개발자들도 아이폰 개발을 할 수 있는 길을 열어 줄것 같습니다. 완벽하진 않지만 말이죠.