Swift(4) Type Inference, Type Annotation, Type Conversion

개발렬·2023년 7월 7일
0

Swift

목록 보기
4/23
post-thumbnail

Type 확인 "is"

타입 체크는 런타임 시에 발생합니다.

타입 확인은 'is' 키워드를 사용하여 수행합니다.

let someValue: Any = 42

if someValue is Int {
    print("someValue는 Int 타입입니다.")
} else {
    print("someValue는 Int 타입이 아닙니다.")
}

as, as?, as! 연산자

  • 'as' 연산자는 컴파일 타임에 사용되며, 타입 변환을 수행합니다.
  • 'as?' 연산자는 런타임에 사용되며, 조건부 타입 캐스팅을 수행합니다. 변환할 수 없는 경우 nil을 반환합니다.
  • 'as!' 연산자는 런타임에 사용되며, 강제 타입 캐스팅을 시도합니다. 반환할 수 없는 경우 런타임 오류가 발생합니다.

Type Inference (형식 추론)

Swift에서는 형식 추론(Type Inference) 기능을 제공하여 변수나 상수의 형식을 명시적으로 선언하지 않아도 자동으로 추론할 수 있습니다.

let a = 12
type(of: a) // Int.Type

컴파일러가 정수를 가장 빠르게 처리하기 때문에 Int 형식으로 추론한 결과입니다.

Type Annotation

Type Annotation은 변수나 상수의 이름 뒤에 콜론(:)을 붙인 후 형식을 명시합니다. 예를 들어, 정수형 변수를 선언하고 싶다면 다음과 같이 작성할 수 있습니다:

var myNumber: Int = 10

타입을 명시적으로 선언해 주고 있습니다.

이는 코드를 간결하게 작성할 수 있게 도와줍니다.
명시적으로 선언하는 것이 코드의 가독성을 높이고 의도를 명확히 전달하는 데 도움이 될 수 있습니다.

Type Conversion

  1. Type Casting (타입 캐스팅)
    이는 기존의 인스턴스를 참조하는 방식이므로 메모리에 새로운 인스턴스를 생성하지 않습니다. 대신, 컴파일러는 해당 인스턴스에 접근하기 위한 메모리 주소나 포인터를 조정하여 타입을 변경합니다.
class ParentClass {}
class ChildClass: ParentClass {}

let parentObject = ParentClass()
let childObject = ChildClass()

let parentObjectAsChild = parentObject as? ChildClass
let childObjectAsParent = childObject as? ParentClass
  1. Type Conversion (타입 변환)
    값 자체가 변환되므로 새로운 메모리 공간이 할당될 수 있습니다.
let integerNumber = 42
let doubleNumber = Double(integerNumber)
let stringNumber = String(integerNumber)

타입 변환이 실패했을 경우

let a = 123
let b = Int8(a)
Int.max
//성공

let a = 123.45
let b = Int8(a)
Int.max
//타입 변환은 소수점을 날리고 정수 부분만을 취하는 과정입니다.
//성공

let a = Int.max
let b = Int8(a)
//Fatal error, 값을 저장할 공간이 부족하다면 Type Conversion 실패하고 크래시가 발생합니다.
let str = "123"
let num = Int(str)

let str = "number"
let num = Int(str)
//nil
//Type Conversion 실패했지만 에러가 발생하지 않고 nil 값을 반환합니다.
profile
Flutter, iOS...나는 모바일 앱 개발자

0개의 댓글