타입 안정성과 타입 추론 (Type Safety and Type Inference)
스위프트는 타입 안정성 언어입니다. 타입 안정성 언어는 작성하는 코드들의 값에 관한 타입이 명확하도록 권장합니다. 코드 중 어떤 부분이 String을 원한다면 실수로 Int를 지정할 수는 없습니다.
스위프트는 타입안정성을 추구하기 때문에 코드를 컴파일할 때 타입 확인 작업을 수행하고 잘못된 타입이 있다면 오류로서 표시합니다. 이는 개발 과정을 통해 오류를 빠르게 확인하고 수정을 가능하게 만듭니다.
타입을 확인하는 것은 다른 타입의 값들을 작업할 때 오류를 피하는데 도움을 줍니다. 그러나 선언했던 모든 상수와 변수의 타입들을 지정해야 한다는 것은 아닙니다. 만약 필요로 한 값의 타입을 지칭하지 않았다면 스위프트는 타입 추론을 통해 적절한 타입을 찾아줍니다. 타입 추론은 코드를 컴파일할 때 당신이 제공한 값을 간단히 검토 함으로써 컴파일러에게 자동적으로 타입을 추론할 수 있습니다.
타입 추론 때문에 스위프트는 C 혹은 Objective-C와 같은 언어보다 더 적게 타입을 선언합니다. 상수와 변수에는 여전히 명확하게 타입을 주어야 하지만 타입을 지정해주는 많은 일들이 스스로 완료됩니다.
타입 추론은 특히 상수나 변수의 초기값을 선언할 때 유용합니다. 타입 추론은 종종 상수나 변수가 선언한 지점에서 문자 그대로의 값을 할당함으로서 이루어집니다. (문자 그대로의 값은 아래 예처럼 42, 3.14159와 같이 코드에서 직접적으로 나타나는 값을 지칭합니다.)
*부연설명
타입추론은 선언과 초기화가 동시에 이루어지는 곳을 통해 해당 값의 타입을 추론하기 쉬워진다는 말입니다.
예를 들어 어떤 타입이라는 말없이 새로운 상수에 문자 그대로의 값 42를 할당한다면 스위프트는 정수처럼 보이는 숫자로 초기화를 했기 때문에 상수가 원하는 타입은 Int일 것이라고 추론합니다.
let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int
이와 마찬가지로 문자그대로 부동형 소수점 타입을 지정하지 않는다면 스위프트는 Double 타입을 지정하기 원한다고 생각할 것입니다.
let pi = 3.14159
// pi is inferred to be of type Double
스위프트는 항상 부동형 소수점을 추론할 때 Float타입보다는 Double형 타입을 선택합니다.
*부연설명
타입 추론은 더 포괄적인 타입을 선택하게 됩니다. Float의 경우 소수점 자리 6자리 정도를 포함하지만 Double은 15자리를 포함합니다.
만약 문자 그대로 정수와 부동형 소수점을 결합해서 사용한다면 Double 형 타입으로 추론할 것입니다.
let anotherPi = 3 + 0.14159
// anotherPi is also inferred to be of type Double
문자 그대로 값 3은 명확한 타입이 없습니다. 덧셈 부분에 문자 그대로 부동형 소수점이 존재함으로 Double로 추론됩니다.
*부연설명
위의 예시도 마찬가지로 정수 3은 부동형 소수점을 포함할 수 없지만 부동형 소수점 Double은 정수를 포함(3.0)할 수 있습니다. 비슷한 예로 "C"라는 값이 있다면 스위프트는 범위가 더 큰 String 문자열로 타입을 지정해줄 것입니다.
'SWIFT 공식문서 문법 알아보기 > 01.The Basics' 카테고리의 다른 글
Swift 공식문서 해설 The Basics - Type Aliases, Booleans, Tuples (1-8) (0) | 2020.03.27 |
---|---|
Swift 공식문서 해설 The Basics - Numeric Type Conversion (1-7) (0) | 2020.03.20 |
Swift 공식문서 해설 The Basics - Integer, Floating-Point Numbers (1-4) (0) | 2020.03.19 |
Swift 공식문서 해설 The Basics - Comments, Semicolons (1-3) (0) | 2020.03.19 |
Swift 공식문서 해설 The Basics - Constants and Variables (1-2) (0) | 2020.03.17 |