본문으로 바로가기

모바일 개발자가 C#을 주목해야 하는 이유

category Development/C# 2012.07.16 18:11

한빛미디어 네트워크에 올라온 C#을 이용한 크로스 플랫폼 애플리케이션 개발이라는 글을 공유합니다.

최소한의 코드만을 변경하여 여러 플랫폼에서 작동하는 모바일 앱을 만드는 것은 기술이 지향하는 궁극의 경지입니다. 이를 위해서 HTML5 관련 기술 (CSS, Javascript 그리고 다른 표준기술을 이용하는 것)과 Java가 사용됩니다. 또 다른 방법은 Microsoft 社의 .NET과 C#을 사용하는 것입니다. 비록 이 조합을 이용하여 Android와 iOS에서 작동하는 애플리케이션을 만들 수 있지만, Windows Phone 7 개발자 커뮤니티 이외에서는 평가절하 받고 있습니다.
아래에서 인터뷰한 소프트웨어 엔지니어인 Greg Shackles(@gshackles) 씨는 C#과 .NET을 이용한 플랫폼의 잠재력을 넓히는 것을 목표로 활동하고 있습니다. Shackles 씨는 “Mobile Development with C#“의 저자이며, .NET과 관련된 기술을 중점적으로 다루는 블로그를 운영하고 있습니다.

C++이 모바일 애플리케이션을 만드는데 많이 사용된다고 알고 있습니다. 그렇다면 왜 C#과 그와 연관된 .NET을 모바일 애플리케이션을 개발하는데 사용하십니까?

Greg Shackles : 다른 플랫폼 간에 코드를 공유하는 방법은 여러 가지가 있습니다. 하지만 불행하게도, 많은 방법들이 “한 번 작성하여 어디서든지 작동되도록 하는 솔루션”이 되기 위하여 개발자가 UI에 접근하는 것을 배제합니다. 이는 개발자가 제작한 애플리케이션을 여러 플랫폼에서 쉽게 배포할 수 있도록 해줍니다. 이러한 접근 방법은 좋은 것 같지만, 종종 결과물이 해당 플랫폼의 네이티브 앱처럼 보이지 않기 때문에 UX(사용자 경험)를 저해할 우려가 있습니다. UX는 앱을 설계하는데 가장 중요하게 고려되어야할 요소입니다.

개발자들은 개발한 애플리케이션의 코드의 많은 부분을 C#과 Mono Tools을 이용하여, 다른 플랫폼에서 해당 플랫폼의 네이티브 UI를 활용하도록 하면서 공유할 수 있습니다. 이러한 접근법을 이용하여 제작된 애플리케이션들은 해당 플랫폼에서 제공하는 API, 툴킷과 완전히 동일한 것을 사용하기 때문에 마치 네이티브 애플리케이션처럼 보입니다. 어떤 경우에는 개발자가 좀 더 작업을 하기 쉽게 해당 플랫폼의 API들을 정리하는데, 네이티브 언어를 사용하는 것보다 Mono tools를 사용하는 것이 더 큰 도움을 줄 때도 있습니다.

개발자들은 이 방법을 통하여, 새로운 플랫폼으로 진입하기 원할 때마다 다양한 언어들을 익히고 새롭게 개발해야만 하는 고통에서 벗어나서, 비즈니스적인 문제를 해결하는데 더욱 집중할 수 있습니다. 게다가 모바일 플랫폼뿐만 아니라 다른 플랫폼과도 코드를 공유할 수 있습니다. ASP .NET, Silverlight, WPF처럼 C#과 .NET을 지원하는 곳이면 어디든지 적용할 수 있습니다. 이러한 기술들에 이미 익숙한 개발자들은 가지고 있는 기술들을 활용해서, 손쉽게 새로운 플랫폼을 대상으로 하는 비즈니스 기회를 잡을 수 있습니다.

어떠한 점들이 .NET 프레임워크를 모바일 개발에 적합하도록 만들어줄까요?

Greg Shackles : C#과 .NET은 매우 성숙되어 있는 강력한 기술들입니다. 이들은 수 년간 진화하여, 비동기 프로그래밍, 메모리 관리, 그리고 LINQ와 같이 개발자들이 본 기술을 이용하여 작업하는데 큰 도움을 주는 기능들을 제공하게 되었습니다.

예를 들어, Object-C를 이용하여 iOS 애플리케이션을 제작할 때는 .NET 개발자들이 즐겨 사용하는 기능인 가비지 콜렉터를 사용할 수 없습니다. 하지만 Mono Touch는 가비지 콜랙터를 내장하고 있기 때문에 개발자들이 수동으로 메모리 관리에 신경 쓸 필요 없이 훨씬 더 쉽게 작업할 수 있습니다.

C#이나 .NET의 기술적인 약점으로는 어떤 것이 있을까요?

Greg Shackles : 기술적인 제한이 많지는 않습니다. 그러나 개발자와 네이티브 플랫폼 사이에 위치하는 본 기술을 사용할 때, 몇몇의 문제점들은 피할 수 없습니다.

한 예로, iOS는 런타임에서 동적으로 코드를 실행할 수 없습니다. 따라서 표준적인 .NET 방식의 Just-In-Time 컴파일은 지원되지 않으며, 이러한 측면에서 Reflection.Emit이나 Dynamic Language Runtime과 같이 .NET의 런타임 코드 컴파일에 의존하는 것들 또한 사용할 수 없습니다.

이러한 문제를 회피하기 위하여 Mono Touch는 컴파일 하기 전에 애플리케이션을 정적 코드로 만듭니다. 이러한 특정한 제한은 Just-In-Time 컴파일을 지원하는 Android에서는 문제 되지 않습니다.

이미 Android나 iOS의 네이티브 애플리케이션을 개발하고 있는 개발자는 C#을 통해 어떠한 이득을 얻을 수 있을까요?

Greg Shackles : Java나 Object-C로 해당 플랫폼에 맞는 네이티브 앱을 제작하고 있는 기존의 개발자에게는 새로운 개발 도구로 전환하는 것이 분명히 힘들 것입니다. 하지만 새로운 도구를 이용함으로써 그들이 얻을 수 있는 이점은 대체로 모든 플랫폼에서 코드를 매번 다른 언어로 재작성할 필요 없이 공유할 수 있다는 것에 있습니다. Mono Touch와 Mono For Android는 Object-C와 Java로 작성된 코드와 상호작용 할 수 있는 능력을 제공합니다, 따라서 이미 그러한 언어들로 작성된 코드 또한 계속 이용할 수 있습니다.

어떠한 종류의 크로스-플랫폼 모바일 앱들이 C#으로 만들기 쉽거나 좋을까요?

Greg Shackles : 저는 네이티브 언어를 이용해서 작성하는 것 보다 C#을 이용해서 작성하는 것이 더 어려운 범주의 앱이 있다고는 생각하지는 않습니다. 많은 로직을 가지고 있지 않은 극히 간단한 애플리케이션들을 어떤 언어로 작성할 것인가는 전략적인 이익 보다는 점차 개발자의 선호에 따른 결정에 달려 있는 추세가 되고 있습니다. 실제로는 많은 애플리케이션들이 이러한 분류로 편입되지는 않습니다. 대부분의 앱들은 인터넷에 접근하거나 데이터베이스에 정보를 저장하는 기능을 필요로 할 것입니다. 그리고 이러한 점에서 한 번 작성한 코드를 플랫폼을 초월하여 공유할 수 있다는 것이 이득이 됩니다. 개인적으로, 저는 이러한 장점 때문에 C#이 Object-C와 Java 보다 작업하기 더욱 좋은 언어라고 생각합니다.

.NET은 Windows Phone 7에서는 네이티브로 지원하지만 Android나 iOS에서는 Mono Touch나 Mono를 사용하지 않고서는 사용할 수 없습니다. 그렇다면 세 모바일 플랫폼에서 작동하는 애플리케이션을 C#과 .NET 그리고 이들의 비공식적인 변형을 이용해서 동시에 제작할 때 발생할 수 있는 성능적인 이슈나 차이점은 무엇인가요?

Greg Shackles : 개발자와 플랫폼 사이에 하나의 다른 계층이 추가된다는 것이 중요한 것 같습니다. 하지만 대체로 개발자가 특별히 신경을 쓰거나 걱정을 해야 할 부분은 없습니다. Mono Touch로 제작된 애플리케이션들은 ahead-of-time 컴파일러를 통해 작동되기 때문에, 그들의 성능은 매우 최적화되어 있습니다. Mono for Android로 제작된 애플리케이션은 .NET 코드가 작동하도록 하고, 다른 런타임 간의 개체들을 관리하는데 최적화된 지능적인 가비지 콜렉터를 포함하고 있는 Mono 런타임의 인스턴스를 가지고 있습니다. 대체로, C#으로 작성된 앱과 그렇지 않은 앱들간의 성능 차이는 발견되지 않습니다.

또 다른 흔한 걱정거리는 .NET 프레임워크를 간소화 하는 것이 알려져 있지 않기 때문에 발생하는 애플리케이션의 크기에 관한 것입니다. Mono for Android와 Mono Touch 둘 다 linker라 불리는 툴을 빌드 과정의 일부로 포함하고 있습니다. 이 linker라는 툴은 애플리케이션의 컴파일된 어셈블리 코드들을 검사하여 참조되지 않은 프레임워크들을 제거하는 정적 분석 도구입니다. 그 결과, 제작된 애플리케이션들은 실제로 사용되는 .NET Frameworks 부분만 정확히 탑재하고 있기 때문에 애플리케이션의 용량이 획기적으로 줄어들게 됩니다. Mono 팀은 새로운 버전을 배포할 때 마다, linking 프로세스를 최적화하는 새로운 방법들을 찾고 있습니다. 그렇기에 비록 현재도 충분히 애플리케이션의 용량은 줄어들었지만, 애플리케이션의 용량은 점점 더 줄어들 것입니다.


댓글을 달아 주세요