본문 바로가기
iOS/Swift

[iOS/Swift] Type Annotations

by iosdevlime 2022. 10. 29.

지난 포스팅에서...

컴퓨터의 메모리 상에 특정값을 저장하기에 앞서

변수와 상수선언하는 과정이 필요하다는 것을 알아보았습니다.

 

 


 

그런데...

앞서 작성된 변수와 상수 선언의 예시를 살펴보면?

var age: Int = 29 // Int?
let nickname: String = "Jason" // String?
var hunger = false // ??? 뭐지

 

선언 키워드(var, let)와 이름(age, nickname, hunger)뒤에

Int, String과 같은 수식어가 뒤따라 작성되는 것을 확인할 수 있습니다.

 

이와 같은 수식어는 뒤에 나오는 데이터(값)의 유형Type을 의미합니다.

 

이번 포스팅은 변수와 상수의 유형을 규정하는 Type Annotations에 대한 내용입니다.

 

 

 


 

 

Type Annotations

컴파일러가 해당 변수와 상수를 통해 저장(선언)된 데이터 값의 유형을 인식하게 하다!

 

 

정의

  • Type Annotations란 무엇인가요?
    • 말 그대로 Annotations, 주석이란 의미를 가지고 있습니다.
    • 변수와 상수의 데이터(값)의 유형을 설명해주는 수식어입니다.

  • 왜 필요한가요?
    • 컴파일러는 변수와 상수의 데이터(값)에 대해 궁금해 합니다.
    • 아래 예시를 살펴보겠습니다.

 

 

 

활용예시

  • (예시1) 변수와 상수 키워드와 이름만 선언하는 경우
    • 아래와 같이 단순히 선언만 할 경우, 컴파일러는 의문을 가지며 오류를 뱉어냅니다.
    • "그래서 그 이름이 어떤 유형(Type)을 가지고 있는데 ? "  
let name // Error! Type annotation missing in pattern
var age  // Error! Type annotation missing in pattern

 

 

  • (예시2) 변수와 상수 키워드와 이름, 유형(Type)을 함께 선언하는 경우
    • 이름 뒤에 세미콜론 (:)을 사용하여 유형(Type)을 작성하는 것이 기본형태입니다.
    • 선언(할당)값은 선택에 따라 초기화(작성)하거나, 생략할 수 있습니다.
let name: String  // 상수(let) 'name'은 String(문자열) 유형이다.
let age: Int  // 변수(var) 'age'는 Int(정수) 유형이다.

 

 


 

 

Type Inference

만약, 유형이 작성되지 않았다면? 컴파일러는 자동으로 유형을 추론한다!

 

 

정의

  • Type Inference는 또 무엇인가요?
    • Swift 언어의 경우, '설계에 의한 안정성'이란 특징이 존재합니다. (참고 : Swift의 특징)
      • 컴파일러는 해당 선언값의 유형이 비어있을때 초기화 된 값 을 토대로 유형(Type)을 자동으로 추론하게 됩니다.
      •   초기화 된 값 이란, 사용자가 해당 변수&상수에 부여한 값을 의미합니다.

 

 

 

활용조건 및 특징

  • 타입추론의 경우, 반드시 '초기값'을 설정해야 합니다.
  • 초기값이 있을 시 편리하게 사용할 수 있다는 장점이 있습니다.

 

 

 

활용예시

  • 유형(Type)없이 변수와 상수의 초기값을 선언하는 경우
    • 유형(Type)이 없어도, 컴파일러는 자동으로 이름(name, age)의 유형을 추론합니다.
    • 컴파일러 💻 : "유형이 없네? 그런데 초기화된 값이 있으니 알아서 설정해줄게"
let name = "HONG GIL DONG"
var age = 30

자동으로 name의 유형을 String 데이터 타입으로 추론

 

 


 

 

Type Annotations vs Type Inference

추론의 결과(Type)가 사용자가 의도하지 않은 값으로 설정될 수도 있다!

 

 

비교결과

  • 그럼, 타입을 작성하지 않아도 되나요?
    • 타입을 미리 규정(Annotations)하는 것이, 추론하는 방식에 비해 컴파일러 처리속도가 빠릅니다.
    • 또한, 의도치 않은 유형이 도출되는 문제를 방지하고자 Annotations을 권장합니다.

 

 

 

유의사항

  • 영화평점을 A부터 F까지 Character란 유형(Type)으로 선언하고자 할때
    • 유형(Type)의 종류는 다양하기 때문에, 추론 시 의도치 않은 유형(Type)값이 선언될 수 있습니다.
    • 컴파일러는, 추론 시 더 큰 범위(위계)의 유형(Type)을 설정하기 때문입니다.
let movieScore = "B"

//'movieScore'는 문자열(String)이 아닌, 문자(Character)의 값으로 생각했으나,
//실제 타입추론 시 'movieScore'의 유형(Type)은..??

개발자는 Character 타입으로의 추론을 희망했으나, 컴파일러는 추론 시 더 큰 위계의 유형으로 파악하므로 String으로 추론됨

 

 

 

 

'iOS > Swift' 카테고리의 다른 글

[iOS/Swift] Optional, Swift의 꽃  (0) 2022.10.31
[iOS/Swift] Basic Data Type ②  (0) 2022.10.30
[iOS/Swift] Basic Data Type ➀  (0) 2022.10.30
[iOS/Swift] 저장공간, 변수와 상수  (0) 2022.10.27
[iOS/Swift] Hello, Swift !  (0) 2022.10.27

댓글