스위프트에서 변수는 선언과 초기화를 동시에 할 수 있지만, 선언만 먼저 해 놓은 다음 필요한 시점에서 초기화를 하는 것으로 분리하여 작성할 수 있다.
아래 코드를 보자
// 선언과 초기화 동시
var day = 7
// 선언과 초기화 분리
var year : Int // 선언
year = 1999 // 초기화
선언과 초기화를 분리한 year 변수를 보면, 선언할 때 콜론( : )과 함께 Int 자료형을 명시해 놓은 것이 보인다.
: Int와 같은 부분을 타입 어노테이션이라 하는데 타입 어노테이션이란 무엇인가를 알아보자.
1. 타입 어노테이션 ( Type annotation )
타입 어노테이션이란, 변수나 상수를 선언할 때 그 타입을 명시적으로 선언해 줌으로써 어떤 타입의 값이 저장될 것인지를 컴파일러에 직접 알려주는 문법이다.
📝 변수나 상수명 뒤에 콜론 ( : )을 붙이고, 이어서 저장될 값의 타입을 작성해 주면 된다.
// 타입 어노테이션 예시
var name : String
var Char : Character
var dis : Double
var pi : Float
var flag : Bool
우리는 지금까지 변수나 상수를 선언할 때 타입을 명시해 준 적이 없고 값을 초기화해 줬는데 예시에는 타입을 명시해 주는 걸 볼 수 있다.
스위프트의 특성 중에 설계에 의한 안전성(Safety by design)이라는 것이 있다.
📝 스위프트의 구조적 특징에 정리해 놨다
Swift 기능/특징
1. 스위프트 주요 기능 딕셔너리(해시 테이블) - 자바스크립트,파이썬 스위프트는 자바스크립트, 파이썬과 같이 대괄호 구문을 이용하여 값을 배열로 만들거나 문자열로 입력받는 방법을 사용하
sheep1sik.tistory.com
나름 정리를 하자면 아키텍처적인 안전성을 담보하기 위해 스위프트가 여러 장치를 도입했다는게 핵심이다.
그중 하나가 바로 타입 추론이라는 기능이다.
타입 추론은 변수나 상수를 초기화할 때 입력된 값을 분석하여 변수에 적절한 타입을 컴파일러가 추론하는 기능이다.
초기값으로 "Hello World"가 입력되었다면, 컴파일러는 String 타입이라고 추론을 하고 판단을 하는 것이 해당이 된다. 이 덕분에 변수나 상수에 명시적으로 타입을 지정해 주지 않아도 되는 것이다.
// 타입을 명시한 변수 선언
var name : String = "Sheep1sik"
var year : Int = 1999
// 타입을 명시한 상수 선언
let firstName : String = "Sheep"
let birthYear : Int = 1999
// 타입을 명시하지 않은 변수 선언
var name = "Sheep1sik"
var year = 1999
// 타입을 명시하지 않은 상수 선언
let firstName = "Sheep"
let birthYear = 1999
타입 어노테이션이라는 문법이 있다고 해서 매번 타입을 명시해 줄 필요는 없다. 보통의 경우 스위프트에 내장된 타입 추론기가 변수의 초기값을 이용하여 타입이 무엇인지 추론하기 때문이다.
그렇다면 타입 어노테이션을 써야 할지 말아야 할지 고민이 될 때는 어떻게 해야 할지 알아보자
타입 어노테이션을 사용해야 하는 다음 두 가지 경우를 제외하면 타입을 명시적으로 선언하지 않아도 된다.
1. 선언과 초기화를 분리할 경우
타입 추론은 변수나 상수의 선언 시 입력된 초기값을 이용하여 가장 적절한 타입을 추론해내는 과정이다.
스위프트에서 변수와 상수는 선언하는 시점에서 결정되어야 하는데, 선언과 동시에 값을 초기화 하면 자동으로 타입을 결정할 수 있어 타입 어노테이션이 필요 없다.
선언과 초기화가 동시에 이루어지지 않는다면, 타입 추론을 위한 충분한 데이터가 없어 적절한 타입을 추론할 수 없게 된다.
// 선언 + 타입 어노테이션
var year : Int
//초기화
year = 1999
2. 타입 추론으로 얻어지는 타입이 아닌, 다른 타입을 직접 지정할 필요가 있을 때
타입 추론으로 얻어지는 타입이 우리가 원하는 타입이 아닐 때에는 타입 어노테이션을 사용하여 원하는 타입으로 직접 지정해 주어야 한다.
📝 물론 원하는 타입을 지정한다고 해서 모든 타입을 마음대로 지정할 수 있는 것은 아니다
주로 Int 타입 대신 Double, Float, String, Character 타입으로, Double 대신 Float를 지정하는 경우가 대부분
// Int 타입으로 정의
var temp1 = 3
// Float 타입으로 정의
var temp2 : Float = 3
temp1과 temp2 모두 동일하게 3을 대입하였으나 하나는 타입 추론을, 다른 하나는 타입 어노테이션을 이용하여 변수 타입을 결정했다. temp1 변수는 입력값에 가장 적합한 자료형인 Int로 결정되어 3이 그대로 저장되었다. 타입 추론이 적용된 결과다. 그러나 타입 어노테이션을 사용하여 Float 타입을 명시적으로 정의한 temp2 변수는 입력받은 3이 정수임에도 Float 타입에 맞추어 실수 3.0으로 변환되어 저장되었다.
앞의 두 가지 경우를 제외한 나머지는 타입 어노테이션을 생략하고 타입 추론에 의존하면 된다.
물론 가독성을 위해서, 혹은 타입 추론을 믿지 못한다는 이유로 타입 어노테이션을 무조건 사용하려는 사람도 있다.
📝 각자 스타일이니 알아서 하자를 말하고 싶은....
'메모장' 카테고리의 다른 글
Swift 조건문 2 (3) | 2023.03.08 |
---|---|
Swift 조건문 1 (2) | 2023.03.07 |
Swift 기본 자료형 2 (1) | 2023.03.06 |
Swift 기본 자료형 1 (2) | 2023.03.04 |
Swift 변수와 상수 2 (2) | 2023.03.02 |