스위프트의 특성 중 설계에 의한 안전성 (Safety by design)이라는 항목이 있음
아키텍처적인 안전성을 담보하기 위해 스위프트가 여러 장치를 도입했는데
이중 하나가 타입 추론 기능임
타입추론??
변수나 상수를 초기화 할때 입력된 값을 분석하여
변수에 적절한 타입을 컴파일러가 스스로 추론하는 기능임
초기값에 "HI!" 가 입력되면 아 문자열타입이니 String타입이겠군 판단하는거임
이때문에 우리가 변수나 상수에 명시적으로 타입을 지정해 주지 않아도 왠만한 값들은
타입추론을 이용해 적절한 타입이 지정됨...
타입 어노테이션(Type annotation)이란??
변수나 상수를 선언할 때 그 타입을 명시적으로 선언 해 줌으로써
어떤 타입의 값이 저장될 것인지를 컴파일러에 직접 알려주는 문법임
var year : Int // 명시적인 Int타입
var name : String // 명시적인 String타입
이처럼 변수나 상수명 뒤에 콜론(:)을 붙이고, 이어서 저장될 값의 타입을 작성하면 됨
타입 추론이라는 개꿀 기능이 있는데 굳이 타입 어노테이션 기능을 사용을 왜함??
이라는 생각이 들 수 있음
결론 : 두가지 경우가 있음
첫번째 경우 - 선언와 초기화를 분리할 경우
타입추론을 하기 위해서는 변수와 상수 선언하는 시점에서 타입이 결정되어야 함
선언과 값을 초기화하는 과정이 동시에 이루어 지지 않을 경우 타입 추론을
위한 충분한 데이터가 없어 적절한 타입을 추론할 수 없게 됨
// age라는 Int타입의 변수 선언
var age : Int
// 초기화
age = 20
따라서 직접 타입어노테이션을 사용하여 타입을 직접 지정해 주어야 함
두번째 경우- 타입 추론으로 얻어지는 타입이 아닌, 다른 타입을 직접 지정할 필요가 있을때
// test1 은 타입추론으로 인하여 Int로 정의
var test1 = 7
// 타입 어노테이션을 이용한 Float 타입으로 정의
var test2 : Float = 7
실행해보면 test1은 입력값 7과 가장 적합한 Int로 결정되어 7로 저장
test2는 Float타입으로 정의했기 때문에 7.0으로 저장
var stringValue = "문자열" // 문자열로 String타입
var charValue = "문" // Character같기도 하고 String으로 쓸수도 있고...
// Float자료형을 사용하고 싶지만 아쉽게도 Double형이 되어버림...
var test3 = 15.0
// 에라 Float형으로 선언하지 뭐... 타입 어노테이션
var test4 : Float = 15.0
보통 컴파일러는 취할 수 있는 합리적인 판단은 더 넓은 범위의 타입으로 추론을 함
Character 보단 String 이 넓은범위
Float 보단 Double 이 넓은 범위
'Swift랑 친해지기 > Swift 책보면서 정리해보기' 카테고리의 다른 글
쿼우팅, 멀티 라인 스트링 - 스위프트 (0) | 2022.01.13 |
---|---|
타입이 다른 변수끼리의 결합 (0) | 2022.01.13 |
String & Character - 기본 자료형 (0) | 2022.01.12 |
Bool - 기본자료형 (0) | 2022.01.12 |
Double & Float - 기본 자료형 (0) | 2022.01.12 |