서론
갑작스레 iOS의 시뮬레이터와 안드로이드의 에뮬레이터 차이점이 궁금했습니다.
에뮬레이터는 왜 시뮬레이터보다 느릴까?라는 생각에서 시작된 의문이었습니다.
찾아보니 생각보다 근본적인(?) 이유때문에 차이가 있는 거였습니다.
시뮬레이터(Simulator)
시뮬레이터는 실제 기기의 표면적인 결과만 모방하고, 그 안에서 일어나는 모든 과정을 다 구현하지는 않습니다.
예를 들어, 아이폰의 CPU와 OS의 모든 것을 그대로 구현한 것은 아니지만,
시뮬레이터에 앱을 올렸을 때 실제 기기와 결과가 동작하도록 구현되어 있습니다.
그래서 시뮬레이터와 실제 기기 간의 동작에 차이가 있을 수 있고, 서로를 완전히 대체 가능하지 않습니다.
저는 이 개념을 시뮬레이션 게임과 함께 생각하니 이해가 빠르게 되었습니다.
비행기 시뮬레이션 게임은 실제 비행기 동작과 상당히 유사하지만, 실제 비행기를 운용하는 것은 아닌 것처럼
시뮬레이터도 실제 기기와 상당히 유사하지만, 실제 기기와는 차이가 있을 수 있다! 라고 생각하니 이해가 쉬웠어요.
에뮬레이터(Emulator)
에뮬레이터는 실제 기기의 모든 부분을 그대로 구현한 가상 머신입니다.
시뮬레이터가 모방한 것과는 달리 안드로이드 폰의 하드웨어 내용까지 실제와 동일한 것입니다.
그래서 안드로이드 실기기는 에뮬레이터는 서로 대체가 가능합니다.
한가지 주의점은 에뮬레이터에는 하드웨어가 없기 때문에 바이너리 코드 Java와 같은 high-level 언어로 처리한다는 것이 특징입니다.
에뮬레이터가 더 느린 이유가 바로 이것입니다.
실기기에서는 low-level 언어로 처리가 가능하기 때문에 바이너리 코드를 빠르게 처리할 수 있지만,
에뮬레이터에서는 high-level 언어로 처리되기 때문에 비교적 처리가 느려집니다.
현재는 HAXM(Hardware Accelerated Execution Manager)같은 기술이 나와서 에뮬레이터 속도도 빨라졌다고 하네요.
(HAXM으로 인해 소프트웨어에서 돌리던 바이너리 처리를 하드웨어에서 돌릴 수 있게 되었다고 합니다.)
추가로 안드로이드는 왜 시뮬레이터가 아니라 에뮬레이터를 채택했을까? 라는 것도 간단히 찾아보았는데요.
iOS를 포함한 애플의 제품은 애플이 하드웨어 설계부터 소프트웨어 제작까지 모두 담당하기 때문에 여러 환경을 처리하지 않아도 되고, OS에 맞게 최적화가 가능합니다.
하지만 안드로이드는 기기 제조사가 매우 많고 다양하기 때문에 특정 환경만 고려한 시뮬레이터보다는 실제 기기와 똑같은 에뮬레이터가 더 적절하여 에뮬레이터를 채택했다고 합니다.
마무리
가볍게 찾아본 내용이었는데 생각보다 흥미로워서 포스팅까지 진행했습니다.
기존에는 "애플이 하드웨어와 소프트웨어까지 모두 만드니까 더 빠른거겠지"라고 단순하게 생각했었는데
근본적인 개념 자체가 다른 단어였어요.
지금부터는 시뮬레이터와 에뮬레이터 단어 구분도 잘하고 써야겠다는 생각도 들었습니다.
감사합니다.
참고
https://hanaonezero.tistory.com/41
https://giantsol.github.io/emulator-vs-simulator/
https://stackoverflow.com/questions/1584617/simulator-or-emulator-what-is-the-difference
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.