이제 Swift로 넘어가도 되요?

[이미지출처: marshable.com]

iOS 앱 개발자 혹은 관심있는 분들이 관심가지는 화두는 “이제 Swift 로 넘어가도 되요?” 인 것 같다. 어제 OSXDev 모임 때는 내 의견을 언급하지 않았지만 조금 진지체로 내 생각을 얘기하자면 넘어가고 말고는 모두의 마음에 있는 모험심(도전정신)에 달려있다고 본다.

개인적인 이야기를 조금 하자면,
학교에서는 하드웨어 하느라 C/C++만 했었고 대학원 때는 시뮬레이터 만든다고 MFC, 첫 직장에서는 Android 개발을 했었던지라 iOS 앱 개발을 처음 시작했을때는 생소한 Objective-C라는 언어에 익숙해지려 부단히 노력을 했었다. 시중에 나오는 책들 다 사서 이것저것 참조하고 온라인 뒤지고 iOS 업데이트 될 때마다 새로운 기능들 연습삼아 만들어보고.. 다시 그렇게 할 수 있을까란 생각이 들 정도로 재미있었고 문턱 하나씩 넘는 재미에 푹 빠져있었다.

2014년 WWDC에서 Swift가 발표되었을 때는 옆에 계신 분에게 전 계속 Objective-C만 할 겁니다. 라고 했는데 숙소에 돌아와 곰곰히 생각해보니 뭔가에 익숙해지다보니 점점 보수적이 되고 안주하려는 내가 무서워졌었다. 그래서 관심은 가져보자는 생각에 Swift 관련 자료나 도서에 관심을 가지게 되었고 SKP에서 마지막 프로젝트는 함께 프로젝트 수행하는 형님에게 동의를 구하여 Swift로 세팅해서 일단 해보자라는 생각에 질렀었다. 당시가 Swift 1.2였고 다행히 Swift 1.1에 비해서는 꽤 안정적이어서 프로젝트 막바지에는 Swift가 Objective-C를 충분히 대체할만하다는 판단을 했었다.

프로젝트 세팅 당시 수립한 목표는
되도록 ‘NS’ prefix 붙은 클래스 사용은 지양하고 Swift에 새로이 추가된 함수를 사용하는 것이 첫 번째였고 되도록 Objective-C 라이브러리는 지양하는게 두 번째 목표였는데 두 목표 모두 100%는 아니지만 90% 정도는 지켰다고 스스로 평가했다. 서버 통신에 주로 사용하는 AFNetworking은 이미 Alamofire라는 이름을 붙인 Swift 라이브러리가 있었고 이미지 캐싱에 주로 사용했던 SDWebImageHaneke라는 swift 라이브러리로 대체했다. UI는 원채 오픈소스를 사용하지 않다보니 다 만들어서 썼고..

결국은 모험심이 없었다면 이루지 못했던 일이었다.

이렇게 코딩해도 된다! 끌리지 않는가?! [이미지 출처: imgur.com]

본격적인 고민을 시작해보자.

Objective-C에서 Swift로 넘어가길 주저하는 이유는 여러 가지가 있겠지만 가장 큰 요인이 Swift 언어에 익숙해진 다음에 프로젝트에 적용해야하지 않을까? 라는 의구심이 큰 것 같다. 물론 Swift를 고급지게 쓸려면 공부는 해야하지만 기존에 Objective-C처럼 쓰는데는 일주일 정도 헛발질 좀 하면 적응이 되었었다. 메소드명은 거의 똑같고 문법이나 Swift 함수를 이용하기 위한 적응기간이 일주일 정도였다. 충분히 투자할 시간이라고 생각한다. 질러봐라 조금 고되더라도 끝에는 해냈다라는 성취감이 있을지니..

문법이 조금 더 세련(?)되다보니 코드 수도 많이 줄어든다. 특히 Objective-C의 문법상 코드가 다소 지저분해지는 단점도 Swift로 꽤나 극복되며 extension은 신의 한 수라고 생각한다. 헤더파일과 구현파일 왔다갔다하는 수고도 줄어든다. 결국 Swift에 익숙해지면 다시 Objective-C로 넘어오기 힘들다.. (지금 힘들다.. ㅠㅠ)

인기있는 Objective-C 라이브러리들은 대부분 swift로 넘어오거나 지원을 위한 업데이트가 완료되어 있다. 앞서 예를 든 AFNetworking의 경우 prefix가 Alamofire였고 swift 버전은 아예 postfix였던 Networking을 빼버렸다. AF가 무슨 약자일까 궁금해 하던 분들은 이미 아셨겠지만 그냥 가져다 쓴 분들의 경우 이게 맞나? 라는 의심을 할 수는 있으니 주의. (제가 그랬어요….)

초기에 Optional의 개념과 사용법이 다소 혼란스러울 수 있는데 생각보다 쉽고 익숙해지면 좋네! 라는 생각이 들게 한다. 개인적으로도 초기에는 ‘!’를 해야하나? ‘?’을 해야하나? 어라? 컴파일러는 경고를 뱉네? 그럼 요렇게 바꾸면? 왜 이렇지? 만 몇 번 반복하면 익숙해진다. 사실 Swift로 넘어올 때 큰 허들 중 하나인 건 사실이지만 익숙해지면 최고! 최근 Objective-C에 적용된 nullability 도 연장선상에 있다.

Swift 1.1까지는 빌드하는 시간이 최악이었다고 한다. 실제로 1.1에서 컴파일해보니까 돌겠더라. 하지만 1.2에서는 조금 빨라졌고 2.0부터는 1.1에 비해서는 엄청 빨라졌다. 걱정할 필요가 없다.

‘업데이트가 너무 빠르다!’는 장점이자 단점이 있는데 유지보수 차원에서는 사실 단점이다. 신생 언어이고 빠른 성장 중이다보니 어쩔 수 없기는 하지만 그럴 때마다 리팩토링 하는 것도 어찌보면 재미다. migrator를 제공하긴 하지만 OSXDev 회장님이 언급한대로 신뢰하지 않는 편이 좋고 개인적으로는 오류 혹은 경고 문구를 보고 리팩토링하다보면 새로이 변경되는 문법에도 금방 익숙해진다. 단점을 장점으로 승화.. 쿨럭;

그 외에 어려운 단어들로 포장된 장점들이 있겠지만 개인적으로 나열해보자면 저 정도의 장점이 있고 글 타이틀의 질문에 대한 답은

Swift로 넘어가보는 것도 재미고 오픈소스화 된 만큼 여러 프레임워크가 나올 것이니 손해볼 것 없다. 이미 perfect라는 back-end 프레임워크가 공개되었고 그 외 taylor라는 이름을 가진 여러 프레임워크들이 공개되고 있으니 여러 플랫폼을 넘나들고 싶다면 넘어오길(?) 추천한다.

이다.

끝.

Leave a Comment

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