본문 바로가기
프로그래밍 팁/Swift

1-7. Swift - 타입 세이프티와 타입 추론(Type Safety and Type Inference) 문법 개념 정리

by Archivers 2020. 11. 5.

 

타입 세이프티와 타입 추론(Type Safety and Type Inference)

Swift는 타입 세이프(type-safe) 언어입니다. 타입 세이프 언어는 사용자로 하여금 코드를 작성할 때 사용하는 값의 타입을 명확히 하도록 합니다. 만약 문자열(String) 타입의 값이 필요한 경우 정수(integer) 타입의 값을 사용할 수 없습니다.

 

Swift는 타입 세이프 언어이기 때문에 사용자가 작성한 코드를 컴파일할 때 타입 검사(type check)를 진행합니다. 그리고 만약 타입이 불일치하는 곳이 있다면 오류를 표시합니다. 이를 통해 사용자는 개발 과정에서 최대한 빠르게 오류를 발견하고 수정할 수 있습니다.

 

여러 종류의 타입에 해당하는 값을 다룰 때는 타입 검사를 통해 오류를 방지할 수 있습니다. 그러나 그렇다고 해서 모든 상수와 변수를 선언할 때마다 타입을 명확히 표기해야만 하는 것은 아닙니다. 사용자가 어떠한 상수 또는 변수의 타입을 표기하지 않는다면, Swift는 해당 상수 또는 변수에 저장된 값으로부터 적절한 타입을 추론하기 때문입니다. 컴파일러는 사용자가 작성한 코드를 컴파일할 때, 타입 추론(type inference) 기능을 통해 특정한 표현식에 담긴 값을 자세히 살펴봄으로써 해당 값의 타입을 자동으로 추론합니다.

 

이러한 타입 추론 기능 덕분에 Swift는 C 언어나 Objective-C 언어에 비해 타입을 선언해야 하는 필요성이 훨씬 적습니다. 상수인지 변수인지는 명확하게 구분해서 표기되어야 하지만, 해당 상수와 변수의 타입은 대부분의 경우 자동으로 추론됩니다.

 

상수 또는 변수를 선언할 때 초기값(initial value)도 같이 제공하는 경우에 주로 타입 추론의 역할이 빛을 발합니다. 코드를 작성할 때 사용자가 직접 입력하는 값, 이를테면 42나 3.14159와 같은 값을 리터럴 또는 리터럴 값(literal 또는 literal value)이라고 불리는데, 이 리터럴 값을 상수 또는 변수를 선언하는 과정에서 초기값으로 넣어주면 타입 추론이 가능해집니다.

 

이를테면, 새로운 상수에 42라는 리터럴 값을 직접 대입하여 선언한다고 가정해 봅시다. 이 과정에서 사용자는 이 상수의 타입은 명시적으로 입력하지 않았습니다. 그러나 Swift는 42라는 리터럴 값으로부터 42가 정수라는 것을 확인하고, 이 상수의 타입이 정수형 타입에 해당할 것이라고 추론하게 됩니다.

let meaningOfLife = 42

 

위 코드는 다음과 같이 글로 표현할 수 있습니다.

 

"meaningOfLife라는 이름의 상수에 42라는 값을 대입하여 선언합니다. 이 상수의 타입은 명시적으로 입력하지 않겠습니다. 42는 정수이기 때문에 Swift는 이 상수의 타입이 정수형 타입일 것으로 추론할 것입니다."

 

정수와 마찬가지로 부동소수점 값을 초기값으로 제공하는 경우에도 타입 추론이 가능합니다.

let pi = 3.14159

 

위 코드는 다음과 같이 글로 표현할 수 있습니다.

 

"pi라는 이름의 상수에 3.14159라는 값을 대입하여 선언합니다. 이 상수의 타입은 명시적으로 입력하지 않겠습니다. 3.14159는 부동소수점이기 때문에 Swift는 이 상수의 타입이 부동소수점 타입일 것으로 추론할 것입니다."

 

지난 글에서 언급되었듯, 부동소수점 타입에는 Double과 Float 두 개가 있습니다. 참고로 Swift는 부동소수점 타입을 추론할 때 언제나 Float 대신 Double을 선택합니다.

 

만약 정수 값과 부동소수점 값이 하나의 표현식 안에 같이 사용된다면, Swift는 문맥에 맞게 Double 타입을 추론하게 됩니다.

let anotherPi = 3 + 0.14159

 

위 코드는 다음과 같이 글로 표현할 수 있습니다.

 

"anotherPi라는 이름의 상수에 3과 0.14159를 더한 값을 대입하여 선언합니다. 이 상수의 타입은 명시적으로 입력하지 않겠습니다. 3과 0.14159를 더한 값은 3.14159이며 이는 부동소수점 값이기 때문에 Swift는 이 상수의 타입이 부동소수점 타입일 것으로 추론할 것입니다."

 

 

 

 

 

이 글은 Apple이 제공하는 'The Swift Programming Language 5.2 버전' (https://swift.org)을 번역 및 참고하여 작성하였습니다.

댓글