안드로이드 앱을 개발해서 배포하는 상황을 가정해보자.
내가 개발자다. 앱을 개발해서 수많은 사람들에게 배포하고 싶다.
근데 안드로이드는 애플하고 달리 기기가 겁나게 많다.
기기만 많은 게 아니라 AP 제조사도 많다. 퀄컴 스냅드래곤도 있고 미디어텍 디멘시티도 있고 삼성 엑시노스도 있다.
이 각각의 기기들, 각각의 AP마다 개발자인 내가 따로 대응을 해줘야 하나?
그래야 했다면 안드로이드 진영의 플레이스토어 시장은 앱스토어에 밀려서 쫄딱 망했을 가능성이 높다.
그래서 JVM이라고 할 수 있는 Dalvik 이라는 걸 구글이 만들어서, 각 안드폰들이 중간 코드인 바이트코드를 돌리게 만들었다.
개발자는 플레이스토어에 소스코드를 올려두면 된다. 그럼 안드로이드 사용자가 소스코드 다운받고, dalvik으로 바이트코드를 써서 앱을 실행한 것이다.
물론 이 비효율성 때문에 안드로이드폰은 iOS보다 연산 성능도 좋지 않고 배터리 효율도 나빴다. 그래도 개발자 생태계를 만들고 시장 점유율을 올리는 것이 먼저였기 때문에 구글이 선택한 방식이다.
나중에 점유율을 어느정도 잡고 성능을 개선할 때는 JIT, AOT 로 이 근본적인 하이브리드 방식의 비효율성을 크게 개선한다. AOT 가 도입되면서 안드로이드도 앱 소스코드를 네이티브 코드로 컴파일하게 된 것이다.
iOS개발자는 좀 다르다. 소스를 앱스토어에 올려두면, 사용자가 다운로드 받는다 할 때 앱스토어가 기계어로 컴파일된 결과를 바로 전송한다. 그게 ipa다.