대수적 데이터 타입(Algebraic Data Type)은 함수적 프로그래밍의 용어에서 나왔다.
대수적 데이터 타입은 데이터 타입이 대수적으로 표현되는 관점을 표현한 것으로, 크게 sum type과 product type이 존재한다.
스위프트의 대수적 데이터 타입
- Sum Type에는 Enum이 있다.
- Prouct Type에는 Struct와 Tuple이 있다.
요일을 표현하는 데이터 타입을 구현해보자.
enum으로 일요일부터 토요일까지 표현한다면, 다음과 같다.
enum Day {
case sunday
case monday
case tuesday
case wednesday
case thursday
case friday
case saturday
}
- Day는 각각의 요일 case가 값을 0부터 6까지 표현하여 7개의 값을 가진다.
Enum 타입이 Sum Type이라고 불리는 이유는 고정된 case들로 값을 표현할 수 있기 때문이다.
나이를 표현하는 Enum 타입을 살펴보면, 2개의 case로 이루어졌지만, 우리는 Age의 값을 257 까지 표현할 수 있다. (UInt8는 0에서 255까지의 숫자를 나타냄)
enum Age {
case known(UInt8)
case unknown
}
Product Type
- Product type은 가능한 모든 값들을 곱한다.
- 예를 들어, 다음 Struct는 2개의 Bool 값을 갖으므로, 상태는 총 4가지다.
struct BooleanContainer { let first: Bool let second: Bool }
모든 경우의 수를 나열하면 다음과 같다.
BooleanContainer(first: true, second: true)
BooleanContainer(first: true, second: false)
BooleanContainer(first: false, second: true)
BooleanContainer(first: false, second: false)
다음의 Product Type인 PaymentStatus를 Sum Type인 enum 타입으로 바꾸어보자
struct PaymentStatus {
let paymentDate: Date?
let isRecurring: Bool
let paymentType: PaymentType
}
enum PaymentType {
case invoice
case creditCard
case cash
}
enum PaymentStatus {
case invoice(paymentDate: Date?, isRecurring: Bool)
case creditCard(paymentDate: Date?, isRecurring: Bool)
case cash(paymentDate: Date?, isRecurring: Bool)
}
struct 타입을 enum 타입으로 변경하면서 얻는 장점은 무엇일까?
enum 타입 한가지 타입만 다루면 된다. 반면, struct로 다루었다면
'Swift > Swift Language' 카테고리의 다른 글
CLI에서 Swift 패키지 매니저 사용하여 swift 빌드하기 (0) | 2023.06.21 |
---|---|
Swift Enum의 RawValue 제대로 사용하기 (0) | 2021.03.27 |
Swift 언어 가이드 - 서브스크립트 Subscript (0) | 2020.04.12 |
Swift 언어 가이드 - 클로져는 참조 타입이다 (0) | 2020.03.08 |
Swift 언어 가이드 - 값 캡쳐링 (0) | 2020.03.06 |