(1) Constant & Variable

  • Contant 상수 : 한 번 값이 대입되면 바꿀 수 없는 값
let name = "Yongtae"
  • Variable 변수
var age = 27
  • 가급적 var보다는 let의 사용을 권장한다.

  • Why?

    • 고려해야할 변수가 적다.
    • 코드의 가독성이 좋다.

(2) Type Annotation / Type Interface

  • Type Annotation
var message: String // String 타입임을 명시
let age: Int // Int 타입임을 명시
  • Swift는 Type-Safe Language다!
    • Compile 단계에서 type checking 수행
  • Type Interface
    • type을 명시하지 않아도 처음 대입되는 값을 compiler가 분석하여 type을 추론한다.
var message = "hello" // String 타입임을 추론

(3) Console 출력

  • print 함수
let msg1 = "Hello,"
let msg2 = "World!"
print(msg1) // Hello,
print(msg1, msg2) // Hello, World!
print("\(msg1) Yongtae!") // Hello, Yongtae!
  • Foundation의 NSLog : objective-c에서 쓰이던 문법으로 레거시 코드에서 흔히 발견 가능
NSLog("Hello, \(msg2)")

(4) 여러가지 Type들

  • Value Type vs Reference Type

    • 모든 타입을 크게 Value Type / Reference Type 두 가지로 나눌 수 있다.
    • 각각이 다른 언어의 Call by Value / Call by Refernce에 대응된다고 이해했다.
Value Type Reference Type
- 선언 시 사용한 상수, 변수 외엔 참조 불가
- 함수, 메소드 인자로 넘어가거나 return되면 복사됨
- 사본을 수정해도 원본에 영향없음
- 선언 시 사용한 상수, 변수 외에도 참조가 가능

- 사본을 변경하면 원본이 한꺼번에 변경
복사 값 자체가 복사 각각의 instance 생성 reference가 대입, 같은 instance 가리킴
대입 새로운 변수나 상수에 대입되면 복사됨 새로운 상수, 변수에 대입되면 참조
member값 변경 let인 경우는 불가 let,var 둘 다 가능
해당 요소 enum / struct class / function
대표적인 것 String, Array, Dictionary Class로 선언된 객체
  • let으로 reference type의 instance를 선언하더라도 멤버 변수들은 수정이 가능하다!
  • Copy on Write 란?
    • 복사를 매번 하는 것이 아니라 복사본의 변경 유무를 판단하여 기존 값을 재사용하거나 필요하다면 그 때 복사를 하는 것
  • Value Type의 장점
    • Dereference과정이 필요가 없기 때문에 속도 면에서 더 빠르다.
    • __Mutability 제어__가 강력하다. let으로 선언하면 절대 못 바꾼다! ==> 함수형 언어에 더 적합하게 사용 가능하다.
  • Integers
    • Int8, Int16, Int32, Int64
    • UInt8, UInt16, UInt32, UInt64
  • Floating Point Numbers
    • Float : 32bit
    • Double : 64bit
  • Type Inference : 타입유추가 가능하지만 명시하면 compile time에 도움이 된다.
  • Numberic Type Conversion : Type Casting (x) type이 다른 경우에 새로운 value를 생성해서 계산해주어야 한다.
  • Boolean
    • 1과 true가 다른 점이 큰 차이! (다른 언어와 달리..)

잘못된 예시

let i = 1 
if i {
	// i가 Int로 추론되기 때문에 사용 불가!
}
  • Tuple

(5) Optionals란?

  • Optional의 의미: 값이 존재하지 않을 수도 있다!

    • 즉, nil값을 가질 수도 있다.
  • var x: Int? ( var x: Int | nil )

  • optional 변수는 값을 명시적으로 초기화해주지 않으면 nil로 초기화된다.

  • 의미적으로 특정 type의 값을 저장하는 상자라고 이해할 수 있다.

  • Optional 변수를 그대로 사용해서는 안되며, unwrapping 과정이 항상 필요하다.

Unwrapping이란?

  • 상자의 포장을 벗겨 실제 데이터를 가져오는 것!

Swift는 어떻게 코딩하는 게 좋을까?

  • 매우 강력한 Type Checking 기능을 가지고 있다. 그러므로 항상 Type에 신경써야한다.
  • var는 최소한! let을 늘리자!
  • 값의 부재가능성이 없다면 Optional 사용하는 것은 자제하자.