-
Swift - Type Safety, Type Alias, Type Conversion, Type CastingProgramming/Swift 2020. 9. 20. 18:42
Image by succo from Pixabay 오늘은 Type Safety, Type Alias, Type Conversion, Type Casting에 대해서 공부해보겠습니다.
Type Safety
Swift는 Type-safe 언어입니다.
쉽게 말해서 Swift에서는 Type이 다르다면 값이 호환되지 않습니다.
같은 수이지만 정수와 실수도 구분합니다. 이러한 오류들은 컴파일 과정에서 Swift가 발견하고 error로 알려줍니다.
64bit 프로세서 환경에서는 Int는 8Byte의 메모리 공간을 가진다고 했습니다. 그렇다면 Int와 Int64는 같은 Type일까요??
Int64와 Int도 호환되지 않습니다. 코드에서 확인할 수 있듯이 다른 Type입니다.
간단하게 똑같은 Type이 아니라면 모두 다른 Type이라고 생각하면 됩니다.
그렇다면 다른 Type끼리 저장하거나 변경하고 싶을 때는 어떻게 해야 할까요??
Type Conversion vs Type casting
두 단어 모두 우리말로 타입 변환 또는 형 변환으로 번역이 됩니다.
하지만 둘은 다른 개념이기 때문에 번역하지 않고 Type conversion, Type casting으로 부르겠습니다.
그럼 두 개념의 차이점에 대해 공부해보겠습니다.
Type Conversion
Type conversion은 새로운 메모리 공간을 확보하고 여기에 Type이 바뀐 값을 저장합니다.
사용하는 방법은 바꾸고 싶은 값을 ()로 감싸고 앞에 바꿀 Type을 적으면 됩니다.
위 코드를 확인해보세요.
하나는 Double을 Int로 다른 하나는 Int를 Double로 conversion 했습니다.
결과를 확인해보면 다른 결과가 나옵니다.
Double을 Int로 Type conversion을 하게 되면 소수점은 버려지게 됩니다.
Int가 정수를 저장하는 타입이기 때문이죠.
반면 Int를 Double로 conversion 했을 때는 버려지는 데이터가 없습니다.
이처럼 Type conversion을 할 때는 특별한 경우가 아니라면 더 포괄적인 Type으로 Conversion 해야 합니다.
Type Casting
Type casting에는 두 가지가 용도가 존재합니다.
애플 문서에서 설명하는 type casting 여기서 설명하는 첫번째 방법인 타입 체크는 다음에 공부해보도록 해요.
두 번째 설명은 instance를 자신의 클래스 계층에 속한 다른 superclass 또는 subclass로 다루는 방법이라고 나와있습니다.
쉽게 설명하면 type conversion과 같이 타입을 변경한다는 것입니다.
하지만 Type casting은 새로운 메모리 공간을 만들지 않습니다.
컴파일 과정에서 해당 Type을 변경하고 싶은 Type으로 처리하게 만듭니다.
첫번째 error는 NSString은 String으로 자동적으로 변환되지 않는다는 의미입니다. 두번째 error는 Double을 Int로 casting할수없다는 의미입니다. Type casting을 하려면 type-cast operator인 as를 사용합니다.
바꾸고 싶은 값 뒤에 as Type을 적으면 됩니다.
NSString은 스위프트에서 사용하는 String과는 다른 문자열 타입입니다.
String과 NSString은 서로 type casting이 가능합니다.
그리고 이를 서로 Toll-free bridged 하다고 표현합니다.
Toll-free bridged 하지 않으면 Type casting을 할 수 없습니다.
Int와 Double은 Toll-free bridged하지 않아서 에러가 발생하는 것을 볼 수 있습니다.
Type Alias (타입 별칭)
Type Alias는 이미 존재하는 Data Type에 별칭을 붙이는 것입니다.
typealias 키워드를 통해서 별칭을 생성할 수 있습니다.
이 코드는 Double Type에 Height라는 별칭을 새로 부여했습니다.
보기에는 다른 타입처럼 보이지만 둘은 같은 Double Type입니다.
그래서 a와 b를 비교할 수 있게 되는 겁니다!
별칭을 사용해도 전에 있던 타입도 그대로 사용할 수 있습니다.
그렇다면 Type Alias를 사용하는 이유가 무엇일까요??
가독성이 좋아지기 때문입니다.
a는 이 숫자가 무엇을 나타내는 값인지 알기 힘들지만 b는 키를 나타내는 값임을 알 수 있습니다.
또한 후에 공부할 function type은 ((String, Int) -> Double) -> Bool과 같은 Type도 있습니다.
이러한 Type을 자주 사용한다면 typeAlias를 통해서 가독성을 높일 수 있습니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#
The Basics — The Swift Programming Language (Swift 5.6)
The Basics Swift is a new programming language for iOS, macOS, watchOS, and tvOS app development. Nonetheless, many parts of Swift will be familiar from your experience of developing in C and Objective-C. Swift provides its own versions of all fundamental
docs.swift.org
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Operator 종류 (0) 2020.09.28 Swift - Operator 기본 (0) 2020.09.28 Swift - Character, String, Bool Data Type (0) 2020.09.19 Swift - Number Data Type (0) 2020.09.19 Swift - Type Annotation, Type Inference (0) 2020.09.16