[Swift] Type 총정리

문다연·2023년 1월 6일
0

ios.moon

목록 보기
22/26
post-thumbnail

Type Inference 형식 추론

Swift에서는 변수나 상수의 자료형을 명시하지 않은 경우 초기값을 바탕으로 형식을 추론한다.
이 때문에 자료형을 선언하고 싶지 않은 경우, 초기값을 반드시 저장해주어야 추론이 가능하다.
자료형을 선언하지 않고, 초기값도 저장하지 않으면 에러가 발생한다.

Type Inference Rules

Type Annotation

초기값을 저장하더라도 형식을 지정해주는 경우가 있다.

1. 초기값으로 추론한 타입과 다른 타입으로 생성하고 싶을 때
예시로 아래와 같은 경우가 있다.

let ch: Character = "C"

타입을 지정하지 않았다면 타입 추론의 결과로 자료형은 String으로 선언되었을 것이다.

2. 컴파일 시간을 단축하기 위해
타입을 지정하지 않으면, 타입을 추론하는 시간만큼 컴파일 시간도 늘어난다.
따라서 컴파일 시간을 단축하기 위해 type annotation을 사용하기도 한다.


Type Safety

Swift가 안전한 프로그래밍 언어인 이유는 형식의 안정성에서 온다.
Swift는 자료형을 엄격히 구분한다. 타입간 호환의 예는 코드를 통해 쉽게 확인할 수 있다.

  • 호환되지 않는 타입과 값들
let str: String =  123
let num: Int = 12.34
  • 메모리 공간의 크기가 다르므로 호환되지 않는다.
let a: Int = 7 //  8 바이트
let b: Int8 = a // 1 바이트
  • 메모리 공간의 크기는 같지만, 타입명이 다르므로 호환되지 않는다.
let a: Int = 7 //  8바이트
let b: Int64 = a // 8바이트
  • 타입이 다른 변수 또는 상수 간 연산이 불가능하다.
let a = 12
let b = 3.456
let result = a * b // 계산불가. 타입이 같아야 연산 가능.


// 이럴 때는 소수점을 잃으면 안되기 때문에 Int를 Double로 형변환해서 계산해야 한다.
let a = 12
let b = 3.456
let result = Double(a) * b

Int(Double(a) * b)  // a를 Double로 형변환 후 b와 곱하고 Int로 형변환
a * Int(b) // b를 Int로 형변환 후 a와 곱해줌

Type Conversion

Type Conversion vs Type Casting

  • Type Conversion 메모리에 저장된 값을 다른 형으로 바꾸어 새로운 값을 생성
  • Type Casting 메모리에 저장된 값을 그대로 두고 컴파일러가 다른 형으로 처리하도록 지시
let a = 123
let b = 4.56

Double(a) + b // 123.0 + 4.56
a + Int(b) // 123 + 4

let c = Int8(a)

let d = Int.max
// let e = Int8(d)
/*
 fatal error. 값을 저장할 공간이 부족해짐. 
 큰 자료형에서 작은 자료형으로 타입 conversion시에는 이 상황을 주의해야 한다.
 */

let str = "123"
let num = Int(str)

let word = "number"
let test = Int(word) // return nil ** 오류가 아닌 nil이 리턴된다!

Type Alias

  • 기본자료형에 새 이름(별명)을 추가하는 방법이다.
  • NewName은 UpperCamelCase 규칙으로 작성한다.
  • TypeName은 기존에 존재하는, 별칭을 지어주려는 타입의 이름이다.

Example

Coordinate = Double 

새로운 자료형을 만드는 것은 아니라 별명을 만드는 개념이다.

let lat: Coordinate = 12.34
let lon: Coordinate = 56.78

→ lat과 lon의 type을 새로 지정한 별명인 Coordinate로 선언했지만, Coordinate는 곧 Double형이다. 따라서 두 상수는 실제로 Double로 저장된다.
type alias는 자주 사용되지는 않지만, 가독성이 높아진다!

profile
ios-moon.tistory.com 이전했어요 🚛

0개의 댓글