Swift vs. Objective-C ?!

2014년 Apple은 WWDC 2014에서 Swift를 발표했고 빠르게 버전업을 거쳐 벌써 Swift 2.0이 나왔습니다.

WWDC2014 Swift

WWDC2014 Swift

발표 당일 현지에 있었던 전 환호의 소리를 들었지만 걱정이 많았습니다. 새로운 언어를 배워야 한다는 부담감도 있었고 반감도 있었죠. 그래서 주변 분들에게는 난 계속 Objective-C로 개발할거야 라고 장담했었죠.

하지만 그 장담은 불과 일년만에 깨지고 말았습니다. 올해 초 새로운 프로젝트에 투입이 되었는데 무슨 이유인지 몰라도 욕심이 생겨서 프로젝트를 Swift로 세팅했습니다.
당시는 Swift 1.1에서 1.2로 넘어가는 시점이었는데 미리 해본 개발자분들은 아직은 아니다라며 말리셨습니다만 무모한(?) 도전을 해보기로 했습니다.

결국 Swift 1.2를 이용해 프로젝트를 계속 진행하였고 최근 결과물이 Apple의 심사를 마치고 App Store에 등록이 되었습니다.

왜 중도에 Objective-C로 회귀하지 않고 Swift로 프로젝트를 지속했을까 궁금증이 생기시는 분도 계실테고 반대로 아직도 시기상조 아닌가라고 생각하시는 분들이 많으시리라 생각됩니다. 그래서 좀 늦었지만 Swift 프로젝트 경험기를 공유하고자 합니다.

  • Swift로는 안되는 것이 많다.

아닙니다. 어떤 framework를 사용하느냐에 따라 버그 유무는 존재했었지만 안되는 것은 없었습니다. 1.1까지는 버그가 꽤 많았다고 합니다. 그래서 Objective-C 코드와 Swift 코드를 Bridge 해서 사용하느니 그냥 Objective-C로 하겠다는 분도 계셨었습니다. 이 부분은 1.2에서 많이 개선되었던 걸로 알고 Swift 1.2로 세팅한 프로젝트를 지속했습니다.

  • External Framework(Module) 의 다양성

Github나 CocoaPods 등에 배포되는 다양한 프레임워크나 모듈들 활용을 잘 하시는 분들이 많으실 겁니다. 대표적인 것이 RESTful API 호출을 위한 AFNetworking(Swift 버전은 Alamofire로 바뀌었습니다.) 프레임워크죠. Swift로 아직 포팅되지 않은 코드들이 많긴 하지만 주로 사용하는 비중이 큰 프로젝트들은 꽤 빨리 Swift로 포팅되고 있습니다. 단순한 포팅이 아닌 Swift의 특장점을 살려 다양한 추가 기능들도 많이 추가된 코드들도 많습니다. 즉, 사용성이 높은 코드들은 꽤 빠른 시간 안에 Swift로 전환되었고 되고 있습니다. 최근 트랜드를 보면 Swift로 switching이 꽤 빠르고 주로 사용하는 언어 Top 10에 들기도 했더군요.

  • Swift 버그 많잖어?!

앞에도 서술했지만 1.2부터 버그가 많이 줄었습니다. 최근에 공개된 2.0은 아직 실무 코드에 적용은 해보질 않았지만 심각한 버그가 있다는 글을 본 적은 없습니다.
(드디어 try catch 문법이 생겼습니다!!) 보통 기존 코드들과 연동 부분에서 버그가 많이 생기는데 이는 Swift가 변수 타입에 대해서 유연하지 않고 되려 strict해서 생긴 문제들이 대부분이었습니다.

  • Objective-C 코드 다 버려야해?

아닙니다. 전 사실 프로젝트 진행하면서 한 가지 고수했던 부분이 Objective-C 코드 최소화하자였습니다. 그 때문에 UI 컴포넌트는 모두 직접 구현했습니다. 복잡한 컴포넌트가 있는 것도 아니었고 개인적으로 UI코드는 직접 구현하자 주의라서 찾을 생각을 안하긴 했습니다만 bridge를 통해서 쉽게 objective-c 코드도 적용이 되는 걸 확인은 했습니다.

  • 언제 Swift 공부해서 써먹나..

iOS 앱 개발은 사실 framework에 의존하는 경우가 많다보니 Objective-C로 하던 Swift로 하던 API 명은 거의 같습니다. 문법이 조금 바뀌긴 했지만 이 문법도 다른 언어 (특히, script 계열)에 익숙하신 상황이면 더 접근하기는 쉽습니다. 그래도 학습이 조금 필요한 부분은 타입에 더 민감하다보니 코드에 물음표와 느낌표가 많이 사용되며 이 때문에 complie warning이 자주 발생합니다. 옵셔널, 암시적/묵시적이니 심각한 얘기는 이 글에서 하지 않기로 하고 변수 선언에 대해서는 Objective-C와는 확실히 다르니 이 부분은 문서를 보시는 것이 좋습니다. 또 제네릭을 지원하다보니 함수를 생성할 때 고민이 조금 많아지는 건 사실입니다. 기존 Objective-C에서 제공하던 함수들도 사용할 수는 있지만 Swift에서 새로이 구성된 함수 사용법을 익혀야 하며 NS prefix가 붙은 클래스들을 대체하는 클래스들이 많이 생겼습니다. 특히 데이터 표현을 위한 클래스들은 모두 NS prefix를 떼고 새로이 구성되었습니다. (String, Set, Dictionary 등등) 물론 NS prefix가 붙은 클래스들 사용은 가능하지만 조금만 공부하면 더 모던하게 데이터를 다룰 수 있습니다. Objective-Cㄹ 하셨던 분이라면 아주 심각하게 공부할 필요는 없습니다. 문법만 좀 바뀌었구나 정도입니다. 새로이 구성된 데이터 타입을 사용하신다면 해당 부분에서는 헤딩을 좀 하셔야 하긴 합니다.. (Range 사용하기가 가장 까다로웠네요..) 그보다도 Swift를 함수형 언어로 생각해서 개발을 하신다면… (현재 시도중인데 손에 착착 붙진 않네요.. ㅠㅠ) 우선 적용을 해보시면서 필요한 부분을 공부하시는 걸 추천해드립니다. 설명으로만 보다보면 머리에 쥐가나요..

결론은 이제 Swift 쓰셔도 됩니다. 물론 Swift는 계속 버전업을 할 겁니다만 문법이 많이 바뀌거나 하진 않을 듯 합니다. Apple이 발표한대로 Swift가 가을에 Open Source가 되면 Back-End Framework도 Swift로 개발할 날이 올 것 같네요. 🙂

그래서 만든 결과물이 뭐냐구요?  5DUCKS 라는 서비스입니다. 한국 앱스토어에서만 공개되어 있습니다.

추가!

Swift로 프로젝트 진행하면서 참고한 도서 목록입니다.

  1. Objective-C 개발자를 위한 Swift
  2. Pro Design Patterns in Swift

그리고 최근 Swift를 좀 더 잘 써볼까 싶어서 구매한 책입니다.

  1. Functional Programming in Swift

스크린샷 2015-08-26 오후 5.44.10

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.