Swift로 MacOS 애플리케이션 만들기 #2 Swift 기초2

Explanation

사실은 어제 Swift 기초 문법을 공부하고, '그래도 내가 그동한 개발한 시간이 있는데 대에충~ 인터넷에 메서드들 검색하면서 만들면 되겠지'라는 생각으로 호기롭게 Xcode 열고 프로젝트를 만들다가, 굉장히 많은 난관에 부딛치며 거의 중상을 입고 패잔병의 마음으로 기초 문법 2탄으로 돌아왔습니다.

그래도 좀 아는게(그나마) 자바스크립트(타입스크립트)라서 어쩔 수 없이, 본문의 내용은 자바스크립트와의 차이점 위주로 작성이 될 것 같습니다.
(이전 글과 마찬가지로 Swift가 거의 처음이라 잘못된 내용이 굉장히 많을 수 있습니다.)

1. 문자열 타입

// swift
let a: String = "a"
let b: NSString = "b"

String은 Swift String이고 구조체.
NSString은 Foundation String이고 클레스.

대에충 느낌적으로 Foundation은 오브젝티브C에서 쓰다가 온 거 같고 Swift는 스위프트 나오면서 만들어진 거 같아요.

라고 하는데, 왕초보인 나에겐 정확히 무슨 차인지 잘 모르겠네요. 지금까지 아는 정보로는 구조체는 값을 복사하고 클레스는 참조값을 복사한다는데..

요 부분은 나중에 프로젝트 하면서 알게되면 추가하도록 할게요.
아마도 당분간은 그냥 String 쓸 거 같아요...

오! 타입 앞에 NS가 붙는건 NextStep의 줄임말로 예전 오브젝티브C 시절의 타입이래요.
(이전에 쓰던건데 왜 NextStep일까요??)
[참고]
https://velog.io/@loinsir/Swift-NS-%ED%83%80%EC%9E%85

2. 범위연산자

// swift
for a in 1 ... 3 {
  print(a)
}
// 1
// 2
// 3

for a in 1 ..< 3 {
  print(a)
}
// 1
// 2

이건 자바스크립테 없는 연산자네요.
이렇게 시작과 끝이 다 있지 않고 시작점이나 끝점만 사용할 수 도 있다고해요.

// swift
let a = ...3
let b = 1...

3. 계산 속성

// swift
class Test {
  let a: Int = 1
  var b: Int = 2

  var c: Int {
    get {
      return a + b
    }
    set {
      b = newValue
    }
  }
}

let d = Test()
print(d.c) // 3
d.c = 1
print(d.c) // 2

위 코드에서 set 부분이 없으면 '읽기 전용 계산 속성' 이라고 합니다.
음... 대략 어떤 느낌인지 알겠지만서도, set의 활용해 대해서는 아직 잘 모르겠네요.

set의 활용에 대해서는 나중에 사용하게 되면 추가해볼게요,
아마도 당분간은 '읽기 전용 계산 속성'으로만 사용하게 될 거 같아요.

4. 타입 체크 연산자

// swift
let a = 1
if a is Int {
  print("true") // true
}

자바스크립트에서는 타입 체크가 좀 번거로울 때가 많은데, 스위프트는 깔끔한 거 같아요.

5. 확장

// swift
struct Test {
  var a = 1
}

extension Test {
  var b: Int {
    return a + 2
  }
}

let c = Test()
print(c.a) // 1
print(c.b) // 3

6. 프로토콜

// swift
protocol Proto {
  var test: String { get }
  func test2() -> String
}

class Test: Proto {
  var test = "abc"
  func test2 () -> String {
    return "test"
  }
}

프로토콜이라고해서, 무식하게 막 HTTP, TCP, UDP 이런거 생각하고 약간 걱정했는데,
타입스크립트에서 interface랑 비슷한 거 같아요.

역시, 이론 공부는 별로 흥미롭지 않네요..
다시 한번, 프로젝트에 몸통 박치기를 시전하고 다음 포스팅은 조금 더 흥미진진한 이야기로 돌아올...
(수 있기를...)

끝

참고.
https://www.youtube.com/watch?v=jDKV-M6fyIk