모바일 앱을 개발하려면 모바일 개발용 프로그래밍 언어를 알아야 합니다. 하지만 수많은 선택지 중에서 프로젝트에 가장 적합한 언어를 고르는 일은 결코 쉽지 않습니다. 이 글에서는 다양한 모바일 개발 언어를 살펴보고, 여러분이 최선의 결정을 내릴 수 있도록 도와드리겠습니다.
프로그래밍 언어의 선택은 무엇을 만들고자 하는지에 따라 달라집니다. 어떤 앱에서는 특정 언어가 제공하는 모든 기능이 필요 없을 수도 있고, 반대로 하나의 앱을 만드는 데 두 개 이상의 언어가 필요한 경우도 있습니다. 지금부터 주요 모바일 개발 언어들을 하나씩 짚어보며 올바른 선택에 도움이 되는 핵심 정보를 정리해 드립니다.
안드로이드 네이티브 개발 언어
Java(자바)
TIOBE 프로그래밍 언어 순위 기준으로 Java는 꾸준히 상위권을 유지하고 있는 검증된 언어입니다. 안드로이드 앱을 개발하고 싶다면 Java부터 시작하는 것이 가장 무난한 선택입니다. 오랜 역사만큼 방대하고 탄탄한 개발자 커뮤니티를 보유하고 있어 기술 지원과 문제 해결에 필요한 자료를 쉽게 찾을 수 있다는 큰 장점이 있습니다.
Java로 모바일 개발을 할 때 제약은 사실상 상상력과 본인의 Java 실력뿐입니다. 생각할 수 있는 거의 모든 종류의 앱을 구현할 수 있습니다.
Kotlin(코틀린)
Kotlin은 인기 IDE인 IntelliJ IDEA로 유명한 체코 기업 JetBrains가 설계하고 개발한 언어입니다. 2017년 구글 안드로이드 팀이 Kotlin을 공식적으로 지원하겠다고 발표하면서 안드로이드 개발의 새로운 표준으로 자리 잡았습니다.
Kotlin은 Java가 가진 몇 가지 문제점을 해결하기 위해 만들어졌습니다. Kotlin 지지자들에 따르면 문법이 더 간결하고 깔끔해서 코드량이 줄어듭니다. 덕분에 장황한 문법과 씨름하는 대신 실제 문제 해결에 집중할 수 있습니다. 또한 같은 프로젝트에서 Kotlin과 Java를 함께 사용할 수 있어 활용성이 매우 높습니다.
iOS 네이티브 개발 언어
Swift(스위프트)
iOS 기기용 앱을 개발하고 싶다면 Swift가 가장 적합한 언어일 것입니다. 2014년에 처음 소개되고 2015년에 오픈소스로 공개된 Swift는 현재 iOS 개발자들이 가장 많이 사용하는 대표 언어로 자리 잡았습니다.
Swift 5.5에는 async/await, 구조화된 동시성(structured concurrency), actor 등 강력한 신규 기능이 추가되었습니다. Apple이 Swift 홍보에 아낌없이 힘을 쏟고 있는 것은, 이 언어를 자사 앱 생태계의 메인스트림 언어로 만들려는 의지가 분명하기 때문입니다.
Objective-C(오브젝티브-C)
Objective-C는 iOS의 원조 개발 언어입니다. Swift가 iOS 개발의 최신 표준이 되었지만, 여전히 많은 프로젝트가 Objective-C에 의존하고 있습니다. 그래서 Objective-C에서 Swift로의 전환은 더디게 진행되고 있으며, 일부 프로젝트에서는 두 언어를 모두 다룰 줄 알아야 할 수도 있습니다.
크로스 플랫폼 개발 언어
JavaScript + React Native
JavaScript는 웹 초창기부터 이어져 온 긴 역사를 지닌 언어로, 프론트엔드와 서버 사이드 모두에서 널리 사용됩니다. 웹 개발자들은 JavaScript 하나로 웹사이트의 사용자 경험을 개선하는 것부터 완전한 웹 앱 구축까지 다양한 작업을 수행할 수 있습니다.
오늘날 모바일 개발을 위해 특화된 여러 JavaScript 프레임워크가 등장했는데, 그 대표주자가 바로 React Native입니다.
React Native는 전통적인 웹 개발자가 JavaScript와 React 문법을 조합해 단일 코드베이스로 iOS, Android, 웹용 앱을 만들 수 있게 해주는 프레임워크입니다. 즉, 앱을 한 번만 작성하면 iOS와 Android 양쪽에서 모두 실행할 수 있습니다.
React Native는 웹의 React DOM과 사용감이 매우 비슷하지만, UI를 구성하는 빌딩 블록으로 HTML과 DOM 대신 iOS와 Android의 네이티브 컴포넌트를 사용한다는 점이 다릅니다.
React Native의 철학은 "한 번 배우고, 어디서든 작성한다(learn once, write anywhere)"입니다. React를 익혀두면 웹, Android, iOS 어디에서든 애플리케이션을 작성할 수 있다는 의미입니다.
JavaScript + Ionic(하이브리드 앱)
크로스 플랫폼 애플리케이션을 만들 수 있는 또 다른 프레임워크가 Ionic입니다. Ionic을 사용하면 HTML, CSS, JavaScript 같은 기존 웹 기술만으로 하이브리드 모바일 앱을 개발할 수 있습니다.
Ionic의 핵심 아이디어는 코드를 한 번 작성하면 여러 플랫폼에서 매끄럽게 실행되도록 하는 것입니다. 하이브리드 앱은 본질적으로 WebView를 통해 네이티브 기기에 삽입된 웹 앱입니다. 하이브리드 앱은 네이티브 기기 기능과 직접 통신할 수 없기 때문에, Apache Cordova라는 브리지를 활용합니다. Cordova는 네이티브 코드를 JavaScript API로 감싸서 웹 앱에서 접근할 수 있게 해줍니다.
Ionic은 사전에 디자인된 UI 컴포넌트, 테마, 타이포그래피 등을 활용해 세련된 앱을 손쉽게 만들 수 있다는 장점이 있습니다.
Dart + Flutter
Flutter는 iOS, Android, 웹, 데스크톱용 앱을 개발할 수 있는 UI 프레임워크입니다. Google은 2015년 Flutter의 초기 버전을 공개했고, 2018년 첫 정식 안정 버전을 출시했습니다.
Flutter의 인기가 빠르게 성장하는 이유는 풍부한 기능 덕분입니다. 이 프레임워크의 핵심은 고성능 그래픽 엔진과 Dart 프로그래밍 언어의 결합입니다. 개발 과정에서 Dart는 완전한 타입 안정성(type safety)과 핫 리로드(hot reload)를 제공하여 빠르고 안정적인 앱 개발을 돕습니다.
배포 단계에서는 Dart가 네이티브 머신 코드로 컴파일됩니다. 덕분에 어떤 플랫폼에서도 그래픽이 아름답고 부드럽게 렌더링됩니다.
Flutter는 다양한 기기에서 동작하기 위해 추가 브리지가 필요하지 않으며, Ionic 같은 WebView 기반 프레임워크와도 다릅니다. Flutter는 자체 기술로 소스 코드를 머신 코드에 직접 컴파일하기 때문에 속도와 성능 면에서 큰 이점을 누립니다.
그 외 주요 언어
C
C는 이 목록에서 가장 오래된 언어지만, TIOBE 순위에서 늘 최상위권을 유지하는 불멸의 언어입니다. Java처럼 베테랑 개발자들이 가득한 커뮤니티를 보유하고 있어, 버그 없는 코드를 작성하는 데 귀중한 조언을 얻을 수 있습니다.
Bell Labs 재직 당시 Dennis Ritchie가 만든 C는 컴퓨터의 저수준(low-level) 연산을 직접 제어할 수 있는 강력하고 폭넓게 채택된 언어입니다. Android NDK(Native Development Kit)를 활용하고 싶다면 C 언어에 익숙해져야 합니다.
C++
C에 익숙하다면 C++ 코드를 읽고 쓰는 일도 어렵지 않게 느껴질 것입니다. C++은 C의 확장판으로, 더 많은 고수준 기능과 객체지향 프로그래밍(OOP) 지원을 갖추고 있습니다. C++ 역시 Android NDK 개발자들이 선호하는 언어이며, Windows Mobile 앱 개발에도 활용할 수 있습니다. 소프트웨어 개발 분야에서 C++은 Java와 어깨를 나란히 하는 언어로, 마스터할 가치가 충분합니다.
모바일 앱 유형별 분류
모바일 앱은 크게 네이티브(native), 하이브리드(hybrid), 네이티브 크로스 플랫폼 세 가지로 나눌 수 있습니다. 네이티브 앱은 운영체제의 모든 기능과 시설을 온전히 활용할 수 있어 성능 면에서 가장 빠릅니다. 다만 각 플랫폼마다 사용하는 프로그래밍 언어가 다르기 때문에, 플랫폼별로 별도의 코드베이스를 유지 관리해야 합니다.
예를 들어 안드로이드는 Java나 Kotlin, 그리고 C/C++을 사용해 네이티브 앱을 개발합니다. Apple의 iOS 플랫폼은 Objective-C와 Swift를 네이티브 언어로 사용합니다. 이러한 네이티브 앱 언어들은 모두 인터프리터 방식이 아닌 컴파일 방식입니다.
하이브리드 모바일 앱은 사실 모바일 기기에서도 동작하도록 설계된 웹사이트입니다. 사용자는 데스크톱에서 웹사이트를 방문하듯 모바일 브라우저를 통해 접근합니다. 웹 앱을 개발하려면 HTML5, CSS, JavaScript의 조합이 가장 자연스러운 선택이며, Ionic이 이런 WebView 기반 플랫폼의 대표적인 예입니다.
최근에는 새로운 세대의 모바일 크로스 플랫폼 프레임워크가 등장했습니다. 이 프레임워크들은 네이티브 앱과 하이브리드 앱의 장점을 결합하여, 빠르고 가볍면서도 네이티브 기기의 모든 기능에 접근할 수 있습니다. 대부분 JavaScript 등 웹 언어로 작성되므로 플랫폼 간 코드 재사용률도 높습니다. React Native가 이 계열의 선두주자입니다.
언어별 기능 비교
세부적인 언어 특징을 살펴보기 전에 먼저 개발 플랫폼을 정해야 합니다. 이미 모바일 개발 플랫폼을 선택했다는 전제下에서, 각 언어들의 기능을 비교해 보겠습니다.
안드로이드 네이티브: Java vs Kotlin
안드로이드 네이티브 개발이라면 Java와 Kotlin이 대표적인 선택지입니다. 항목별로 비교해 보겠습니다.
Null 안정성
Kotlin은 Null 참조를 더욱 정교하게 제어할 수 있어, Java에서 흔히 발생하는 악명 높은 NullPointerException 버그를 훨씬 쉽게 제거할 수 있습니다. 이는 개발 시간을 단축하고 생산성을 높여줍니다.
동시성(Concurrency)
Java도 동시성 연산을 지원하지만, 관련 코드는 가독성과 유지보수성 문제로 고생하기 쉽습니다. Kotlin은 코루틴(coroutine)을 통해 이 문제를 해결하여, 읽기 쉽고 이해하기 쉬운 코드를 만들어냅니다.
타입 시스템
Java의 타입 시스템은 일관성이 떨어져 때때로 혼란을 일으킵니다. 특히 int, boolean 같은 기본형(primitive type)은 특수한 경우로 따로 처리해야 합니다. 반면 Kotlin은 상대적으로 단순하고 유연한 타입 시스템을 갖춰 프로그래머의 실수를 최소화합니다.
지원하는 프로그래밍 스타일
Java는 이론상 다양한 프로그래밍 스타일을 지원하지만, 일부 개발자들은 OOP(객체지향 프로그래밍)를 지나치게 강조한다고 지적합니다. Kotlin은 특정 스타일을 강요하지 않아 개발자가 상황에 맞는 접근 방식을 자유롭게 선택할 수 있습니다. 다만 Kotlin 개발자에게는 소프트웨어 아키텍처와 개발 원칙에 대한 깊이 있는 이해가 요구됩니다.
무엇을 선택해야 할까?
요컨대 Kotlin이 Java보다 우위에 있는 것은 분명하지만, 완전한 전환에는 시간이 걸릴 수 있습니다. 첫째, 개발자들이 Java의 사고방식에 익숙해져 있다는 점이고, 둘째, Kotlin은 비교적 새로운 언어라 일부 기능이 아직 실험적이라는 점입니다.
그럼에도 구글은 Kotlin에 대한 완전한 지원을 공식 발표했습니다. 실제로 안드로이드 공식 IDE인 Android Studio는 Kotlin을 완벽하게 지원하며, 새로운 기능과 역량이 끊임없이 추가되고 있습니다. 앞으로 몇 년간, 적어도 안드로이드 네이티브 개발 분야에서는 Java에서 Kotlin으로 넘어가는 과도기가 이어질 것입니다.
iOS 네이티브: Objective-C vs Swift
iOS 개발의 선택지는 Objective-C와 Swift 두 가지입니다. 각각의 특징을 살펴보겠습니다.
코드 문법
Swift는 더 간결하고 명확한 문법을 갖춰 최소한의 코드로 목표를 달성할 수 있게 해줍니다. 이는 프로그래머의 실수를 줄이고 버그 수정도 수월하게 만듭니다.
메모리 관리
메모리 관리 측면에서 Swift는 Objective-C를 확실히 앞섭니다. Swift는 더 견고하고 신뢰할 수 있는 제어 메커니즘을 강제하여, 개발자가 원치 않는 메모리 누수를 피할 수 있도록 돕습니다.
성능
Swift 코드의 실행 속도는 Objective-C보다 훨씬 빠릅니다. 이는 곧 더 빠른 앱 성능과 향상된 사용자 경험으로 이어집니다.
지원하는 프로그래밍 스타일
Objective-C와 달리 Swift는 함수형 프로그래밍도 기본적으로 지원합니다. 따라서 개발자는 미리 정해진 프로그래밍 스타일에 얽매이지 않고, 문제를 명확히 파악해 더 나은 해결책을 찾을 수 있습니다.
무엇을 선택해야 할까?
안드로이드에서 Kotlin이 Java를 서서히 대체하고 있는 것처럼, iOS에서도 Swift가 주류로 자리 잡으며 Objective-C를 은퇴시키고 있습니다. Apple은 이미 Swift에 대한 폭넓은 지원을 시작했으며, 앞으로 더욱 강화될 전망입니다. 안드로이드 개발자들처럼 iOS 개발자들도 지금 과도기를 겪고 있는 셈입니다.
여러 코드 마이그레이션 도구가 있긴 하지만, Objective-C 프로젝트를 문제없이 Swift로 완전히 변환하는 것은 쉽지 않을 수 있습니다. 때로는 특별한 우회 방법이 필요하고, 그러려면 Objective-C에 대한 상당한 지식이 요구됩니다. 따라서 최선의 전략은 Swift를 우선으로 학습하고, Objective-C는 꼭 필요할 때만 조금씩 익히는 것입니다. 또한 최신 Swift 동향과 발전 흐름을 꾸준히 주시해야 합니다.
크로스 플랫폼 앱
JavaScript(HTML5 기술과 결합)는 가장 널리 사용되는 크로스 플랫폼 모바일 개발 언어입니다. Dart 같은 다른 언어도 있지만, JavaScript가 가장 폭넓은 지원과 채택률을 자랑합니다.
Flutter로 모바일 개발의 최첨단을 경험해 보고 싶다면 과감히 Dart를 배워보세요. 다만 Flutter 플랫폼이 몇 년 후에도 지속될지는 보장할 수 없습니다. 검증된 안정성을 원한다면 JavaScript, 혹은 타입이 보강된 TypeScript를 선택하는 것이 좋습니다.
결론
각 언어의 특징과 업계 트렌드를 제대로 이해하지 못하면 모바일 개발 언어를 선택하는 일은 까다로울 수 있습니다. 하지만 이런 지식을 갖추고 나면, 언어 선택이 해당 모바일 개발 플랫폼에 크게 좌우된다는 사실을 쉽게 알 수 있습니다.
이제 모바일 앱 개발 언어에 대한 그림이 한층 선명해졌을 것입니다. 각 언어의 특징을 최신 개발 트렌드와 맞춰보고, 자신 있게 다음 앱 개발을 시작해 보세요!
새로운 언어를 시작하는 데 도움이 필요하다면, 이 글에서 소개한 튜토리얼과 비디오 강좌, 그리고 모바일 개발 관련 다른 글들을 참고해 보시기 바랍니다.
이 글은 Kingsley Ubah의 기여로 업데이트되었습니다. Kingsley는 독자에게 교육과 영감을 주는 콘텐츠 제작에 열정을 가지고 있으며, 취미로 독서, 축구, 자전거 타기를 즐깁니다.