-
Swift - Type Annotation, Type InferenceProgramming/Swift 2020. 9. 16. 23:38
Image by Settergren from Pixabay 이번에는 Type Annotation(형식 지정), Type Inference(형식 추론)에 대해서 공부하겠습니다.
상수나 변수를 선언하면 메모리에 저장된다고 했었죠? 이 시점에 해당 Type의 크기만큼의 메모리 공간이 할당되고 여기에 값이 저장됩니다.
Int Type은 8Byte, String Type은 16Byte 이런 식으로 말이죠.
사실 Type Inference는 이전부터 계속 사용을 했습니다.
Type Inference (형식 추론)
이 코드 기억 나시나요?
상수와 변수를 선언하는 구문입니다.
사실 상수나 변수를 선언할 때 형식도 같이 선언할 수 있습니다.
그럼 선언을 하지 않으면 어떻게 되는 걸까요?
선언을 하지 않으면 스위프트가 저장된 값을 보고 형식을 알아서 추론하여 지정합니다. 이를 Type Inference(형식 추론)이라고 합니다.
위 코드와 같이 100, 200을 저장하면 스위프트는 Int로 Type Inference을 합니다.
Type Annotation (형식 지정)
그럼 형식 지정을 사용하는 방법을 알아보겠습니다.
이름 뒤에 : (colon)을 적고 Type을 적으면 됩니다. 그리고 값을 적어주면 되죠.
띄어쓰기에도 주의해 주세요. 이름 바로 뒤에 : 그리고 띄어 쓴 후에 Type이름입니다.
이 규칙은 지키지 않아도 에러가 발생하지 않지만 가독성을 위해 지키는 게 좋습니다.
위 코드는 Int라는 형식과 1000의 값을 가지는 someNum 상수를 선언한 구문입니다.
형식을 지정하면 다음과 같이 상수나 변수를 선언할 수 있습니다.
형식을 지정하면 처음에 값을 할당하지 않고 상수나 변수를 선언할 수 있습니다.
그럼 메모리에 8Byte만큼 할당하고(메모리에 할당되는 Byte는 Type에 따라 달라집니다.)
값은 아직 저장을 하지 않은 상태가 됩니다.
주의할 점은 선언은 가능하지만 접근은 불가능합니다.
만약 값을 초기화하지 않고 접근을 하면
초기화하지않고 상수에 접근 다음과 같은 에러가 나옵니다.
constant 'typeNumber' used before being initialized typeNumber.
상수 typeNumber를 초기화하지 않고 사용했다고 나옵니다. 즉 값을 저장하고 접근하라는 의미입니다.
형식 추론을 이용하고 값을 지정하지 않는다면 에러가 발생합니다.
그럼 왜 형식 추론을 이용하여 값을 저장하지 않고 선언하면 오류가 생기는 것일까요?
형식을 추론하려면 스위프트가 값을 보고 형식을 추론을 해야 하는데 추론할 값이 없습니다.
그럼 메모리에 얼마만큼의 메모리 공간을 할당해야 하는지도 모르게 됩니다.
그래서 오류가 발생하게 되죠!
여러 상수, 변수를 한 번에 선언하기
이제 Type Annotation을 이용하면 한 가지 타입의 상수나 변수를 한 줄에 여러 개를 선언할 수 있습니다.
상수, 변수의 이름은 , (comma)로 구분하고 : 뒤에 똑같이 Type을 지정해줍니다.
이때는 모드 같은 Type으로만 지정할 수 있습니다. variableA, variableB, variableC는 모두 Int Type입니다.
형식 추론에 사용되는 기본 타입
숫자, 문자열, Boolean Literal은 각각 Int, Double, String, Bool로 추론됩니다.
- Int8, Int16, Int32...
- Float
- Character
숫자, 문자 등을 위의 형식으로 저장하고 싶다면 Type Annotation으로 타입을 명시적으로 선언해야 합니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID322
The Basics — The Swift Programming Language (Swift 5.6)
The Basics Swift is a new programming language for iOS, macOS, watchOS, and tvOS app development. Nonetheless, many parts of Swift will be familiar from your experience of developing in C and Objective-C. Swift provides its own versions of all fundamental
docs.swift.org
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Character, String, Bool Data Type (0) 2020.09.19 Swift - Number Data Type (0) 2020.09.19 Swift - Naming Convention (0) 2020.09.16 Swift - Constants and Variables (0) 2020.09.16 Swift - Scope (0) 2020.09.15