Slug jacob schwartz cover

Swift의 장점 요약: 나의 코딩을 생활을 바꿔버린 특성 4가지

Swift의 독특하고 진취적인 특성으로 보다 생산적이고 가독성이 높은 코드를 작성할 수 있습니다. 타입 시스템이나 불변성(immutability) 등 Jacob Schwartz는 그가 좋아하는 Swift의 특성에 촛점을 맞춰 이 언어가 자신의 앱 코드베이스에 얼마나 기여했는지 말합니다. 다른 언어에 비해 Swift가 얼마나 쉽고 재미있는지 알아보세요.


제가 일하는 Glint라는 스타트업에서 저는 Swift를 사용해 개발하며, Objective-C나 C++와 비교해서 제 작업과 코드에 큰 영향을 미친 Swift의 4가지 특성에 대해 말해보고자 합니다.

스트롱 타입 시스템 (1:37)

훌륭한 타입 시스템은 코드를 읽는 동안 생각해야 할 로드를 줄여주고 코드가 더욱 명확하게 느껴지도록 합니다. 예를 들어 아래 Objective-C 딕셔너리는 key와 value로 아무 타입, 심지어 nil을 넣을 수도 있습니다.

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

@property (strong, nonatomic) NSMutableDictionary *selectedFilters;

그러나 Swift는 정의에서부터 스트링을 스트링 배열로 바꾸는 딕셔너리임을 명시합니다.

var selectedFilters = [String: [String]]()

객체의 클래스를 체크할 필요가 없고 타입 시스템으로 앱 전체의 논리적 흐름을 통제할 수 있습니다.

불변성 (1:51)

C++에서는 const를 계속 덧붙인 아래 선언들이 똑같이 불변의 ivar를 나타냅니다. 너무 복잡해서 끔찍하게 느껴지죠.

class Puter {
  void compute(obj *ptr);
  void compute(const Obj *ptr);
  void compute(Obj * const ptr);
  void compute(const Obj * const ptr);
  void compute(const Obj * const ptr) const;
};

Objective-C에서라면 끔찍하게 느껴지는 정도가 아니라 그냥 끔찍함 그 자체입니다. mutable과 immutable 버전의 스트링과 배열 등등을 직접 다뤄야 합니다.

Swift에서는 이를 쉽게 선언할 수 있습니다. 변수나 프로퍼티 선언에서 varlet 중에 하나를 고르기만 하면 끝입니다.

var dateString = formatter.stringFromDate(date)
// vs
let dateString = formatter.stringFromDate(date)

프로퍼티 (3:29)

이 코드가 엉망진창이긴 하지만 Swift의 쉽고 강력한 프로퍼티의 힘을 느껴볼 수 있을 겁니다.

var responseRate: Double? {
  didSet {
    let percent = min(100, max(0, Int((responseRate ?? 0)* 100)))
    let baseString = NSLocalizedString("$0 ResponseRate", comment: "PulseTabResponseRate")
    let percentString = "\(percent)%"
    middleLabel.text = baseString.stringByReplacingOccurrencesOfString("$0", withString: percentString)
  }
}

Swift 공식 문서를 처음 보면서 저는 프로퍼티를 문법 설탕 정도로 생각했습니다. 그러나 실제 프로그래밍을 해보니 프로퍼티는 코드를 보다 강력하고 단순하게 설계할 수 있도록 돕고 있었습니다. 뷰 컨트롤러에서 어떤 설문의 응답 비율을 더블 형식으로 받는 setter를 만들려면 더블(double)을 배치할 때 사용자가 볼 수 있는 스트링을 포맷하면 그만이었습니다. 이 방식으로 뷰 컨트롤러에 쉽게 데이터 바인딩을 할 수 있었죠.

훌륭한 커뮤니티 (4:25)

Swift meetup과 정보 뉴스레터 등 학습과 문제 해결을 돕는 훌륭한 온라인 자원들이 있어 이미 학습 환경이 형성돼 있습니다. 이런 환경 덕분에 코드 작성이 쉬워지고 더 즐거워지죠.

그러나 예전 iOS 버전을 새 Swift 버전에서 지원하지 않고, 개발도구가 불안정하며, 랜덤 링커 에러 등 아직 몇몇 문제가 남아 있지만 새 버전 배포를 통해 지속해서 개선되고 있습니다. Swift의 이런 4가지 특성이, 저를 더욱 즐겁게 좀 더 집약적이고 명확하게 코딩할 수 있게 하고, 다른 언어를 사용할 때보다 생산적일 수 있게 하는 원동력입니다.

컨텐츠에 대하여

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

Jacob Schwartz

Jacob Schwartz is a Senior Engineer working in Swift at Glint. In his free time he’s an active hobbyist game developer and has shipped several iOS games including iso and Ragdoll Boxing. His other loves include beer, bicycling, and design. He’s a secret Canadian hiding amongst the Americans, but don’t tell anyone!

4 design patterns for a RESTless mobile integration »

close