스위프트 타입 어노테이션과 타입 추론

스위프트 기본 문법 - 타입 어노테이션과 타입 추론에 대해서

타입 어노테이션과 타입 추론

Swift는 기본적으로 타입 안전(type safe) 프로그래밍 언어이다.

Type Safe?

  • 변수의 데이터 타입이 식별되면 그 변수는 다른 타입의 데이터를 저장할 수 없다.
  • 변수가 선언된 후에도 다른 데이터 타입을 입력할 수 있는 느슨한 타입과 대조적임(내가 이전에 공부하던 JS가 이 타입에 속한다.)

상수와 변수의 타입을 식별하는 방법은 두가지가 있다.

  1. 변수 / 상수가 선언되는 시점에 타입 어노테이션(type annotation)을 사용한다.
    • 변수 또는 상수 이름 다음에 타입 선언
    • Int 타입의 x라는 변수를 선언
var userCount: Int = 10 // Int가 type annotation임
  1. 해당 상수 또는 변수에 값이 할당되는 시점에서 그 값의 타입을 확인하고 그와 같은 타입처럼 사용한다.
var signalStrength = 2.231 // 여기서 이 변수의 타입은 Double로 할당된다.(부동소수점 기본 값은 Float이 아닌 Double이다.)
let myName = "Hyperidiot" // String이 할당됨
  • signalStrength라는 변수를 Double 타입으로 간주하고 이후에도 Double 타입의 값을 할당하면 정상적으로 사용 가능
  • myName은 String으로 간주된다. 마찬가지로 이후에도 스트링 값을 넣어주면 정상적으로 사용할 수 있다.

변수 또는 상수의 선언 시점에서 초기값이 할당되지 않는 경우, 자료형의 명시가 필요하지만 초기값이 할당되는 경우에는 스위프트 컴파일러가 타입을 식별하기 위해서 타입 추론(type inference)을 한다. 따라서 위 예제코드에서 자료값을 할당하지 않았음에도 Double, String 타입이 할당된 것이다. 해당 상태에서 다른 타입의 값을 할당하려고 시도하면 오류가 발생한다.

  1. 타입 추론

일반적으로 변수의 초기값이 존재하지 않는 경우에는 자료형을 명시하게 되는데(type annotation), 초기값이 존재하는 경우에는 자료형을 명시하지 않아도 스위프트 컴파일러가 자동적으로 값의 자료형을 추론하여 해당 변수에 자료형을 할당한다.

var someValue: Int // 초기값이 없기 때문에 자료형을 명시해준다.
print(someValue) // 이 상태에서는 nil을 뱉는 게 아니라 오류가 발생한다.
someValue = 10
print(someValue) // 10

var myName = "Hyperidiot"
print(myName) // Hyperidiot
print(type(of myName)) // String
// 자동으로 자료형이 할당되었다.