To swift cover

Objective-C에서 Swift로 - iOS Tech Talk

소개

많은 분들이 Swift를 익히고 사용하고 있지만, 아직 사용하지 않는 분도 많습니다. 이런 과도기에서 아직 Swift에 익숙하지 않은 분들이나, Swift로의 전환이 내키지 않아서 Objective-C 스타일로 사용하는 분들도 있습니다. 그런 분들을 위해 Objective-C에서 Swift로 넘어갈 때 준비해야 할 점, 알아봐야할 점에 대해 알려드립니다.

Swift는 쉬운 언어일까요?

Apple은 Swift가 쉽다고 말하지만 쓰면 쓸수록 정말 그럴까 하는 생각이 듭니다. 개인적으로는 배우기 만만한 언어는 아닌 것 같습니다. 기존 언어인 Objective-C에 맞게 사용하려는 경향도 많이 남았죠. 완전히 생각이 Swift로 전환되지 않으면 사용하기 어려운 언어일 수 있습니다. 아래 목차의 내용을 살펴보면서 어떻게 인식을 변화할지 말씀드리겠습니다.

이런 개발 뉴스를 더 만나보세요

목차

  • Naming Style
  • Data Types - Structure, Enum, Optional…
  • Constants
  • Properties
  • Closure

Naming Style

Objetive-C와 Swift는 이름 짓는 방법이 다릅니다. 이제 네임스페이스가 생겼기 때문에 더 이상 클래스 접두어는 사용하지 않습니다. 타입 이름을 비교해서 보여드리겠습니다.

toSwift-typeNaming

타입 안에 또 타입을 지정할 수 있으므로 구현이 struct 등에 모아 사용할 수 있어 굳이 prefix를 사용할 필요가 없습니다.

toSwift-init

메서드 네이밍도 바뀝니다. 예를 들어 위 그림의 initWithFrame 등은 매개변수 이름 frame으로 들어갑니다. 다른 메서드의 안에서 사용할 수 이름도 따로 지정할 수 있어 훨씬 간결하게 사용할 수 있습니다. 열거형 케이스도 대문자로 시작하지 않고 소문자로 시작하게 바뀌었습니다.

이런 네이밍은 Swift와 Objective-C를 혼합해서 사용할때 지켜주지 않으면 자동변환이 어렵게 됩니다.

toSwift-good toSwift-bad

위와 같이 메서드 이름이 잘 붙여진 경우 Xcode가 코드를 상호호환해주지만, 잘못된 경우 코드를 사용하지 못하고 찾지도 못하는 경우가 발생합니다.

Data Types

Swift와 Objective-C는 서로 다른 자료형 체계를 가집니다. Swift는 구조체와 열거형을 근간으로 해서 Optional이라는 개념이 들어갑니다. 구조체는 Objective-C와 비슷하지만 변수, 메서드, 생성자까지 만들 수 있다는 것이 다릅니다. Swift의 기본 데이터 타입은 모두 구조체입니다. 심지어 Int에서도 메서드를 구현할 수 있습니다. 따라서 원시타입으로 보이는 타입들도 구조체인 경우가 많습니다.

열거형 의미도 달라지는데 Objective-C에서는 이름으로 묶은 상수 정도였다면 Swift는 고유의 값이 되기 때문에 한차원 높게 사용할 수 있습니다.

toSwift-optional

Optional의 경우 some이라는 상수에 nil 값을 넣으려면 컴파일러 에러가 발생하는데, optional이 아닌 타입에는 무조건 값이 들어있어야 하기 때문입니다. Optional을 이해해야 Swift를 제대로 사용할 수 있습니다. 이런 기능은 열거형으로 구현돼 있다는 점을 기억해 주세요.

Constants

상수 역시 정의와 사용면에서 많이 달라집니다.

toSwift-constant

Swift는 타입 안에 타입을 사용할 수 있어서 연관된 타입을 묶어서 사용할 수 있습니다. Swift를 살펴보면서 달라진 사용법을 찾아보세요.

또한 지역 상수를 잘 사용할 수 있도록 상수로 사용되는 것이 let으로 정의되지 않으면 Xcode에서 거의 반강제적으로 경고를 보내주며, 변수와 상수가 var와 let이라는 키워드로 정의되므로 보다 제대로 사용할 수 있습니다.

Properties

프로퍼티 역시 형태가 다양해졌는데, 이제 프로퍼티 메서드를 오버라이딩할 필요가 없습니다.

toSwift-properties

Objective-C에서는 프로퍼티를 만들고 값이 세팅될 때 추가적인 작업을 하고 싶다면 오버라이딩이 필요해서 코드가 분산되고 복잡했는데, Swift에서는 블럭 형태로 한 눈에 파악이 가능할 수 있게 작성할 수 있습니다. 또한 Objective-C에서 won을 dollar로 환산하고 싶은 경우 get 메서드를 오버라이드해야 했는데, Swift에서는 프로퍼티 뒤에서 연산 프로퍼티의 모습으로 블럭 형태의 구현을 간결하게 할 수 있습니다.

Closure

Swift에서는 closure가 굉장히 많이 사용하므로 이해하는 것이 정말 중요합니다. Swift는 함수형 패러다임을 차용한 언어로, closure는 실행 코드의 묶음인 일급객체로, 함수는 이름이 있는 closure라고 이해하면 쉽습니다. 변수, 상수나 매개변수 등으로 전달할 수도 있습니다. 또한 map, filter, reduce 등의 고차함수를 사용할 수 있습니다.

결론

Objective-C의 틀에 갇히면 Swift의 장점을 제대로 살릴 수 없습니다. 앞서 말씀드린 특징들을 이해하고, Swift을 보다 잘 활용하길 바랍니다. 보다 자세히 알고 싶은 분들은 스위프트 프로그래밍을 참고해 주세요.


이 글은 Realm과 OSXDev가 공동주최한 iOS Tech Talk의 강연을 요약한 것입니다. 전체 발표 슬라이드는 링크에서 볼 수 있습니다.

다음: Realm Obj-C와 Realm Swift의 새로운 기능을 소개합니다.

General link arrow white

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.

조성규

iOS 개발자이자 교육자로 활동하고 있습니다. Swift와 iOS 그리고 컴퓨터과학에 관심이 많습니다.

4 design patterns for a RESTless mobile integration »

close