Swift/Swift 기초문법
[Swift 기초문법 - 63] 값을 동반한 enum
힛해
2024. 8. 21. 00:36
728x90
값을 동반한 enum
Swift에서 열거형은 각 케이스에 단순한 이름만을 할당하는 것이 아니라, 각 케이스가 값을 가질 수 있는 기능도 제공한다.
이 값은 "연관값" 이라고 부르며 각 케이스와 함께 저장되고 다룰 수 있다.
연관값을 가진 enum의 기본 개념
연관값을 가진 enum은 특정 케이스가 하나 이상의 추가 데이터를 가질 수 있게 한다.
예를 들어 enum을 사용하여 다양한 형태의 데이터를 표현할 때 연관값을 사용할 수 있다.
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
- upc 케이스는 4개의 Int 값을 연관값으로 가진다
- qrCode 케이스는 하나의 String 값을 연관값으로 가진다.
열거형 케이스 생성
연관값을 가진 열거형 케이스를 생성할 때는 해당 케이스와 함께 필요한 값을 제공해야한다.
var productBarcode = Barcode.upc(8, 85909, 51226, 3)
print(productBarcode)
productBarcode = .qrCode("ABCDEFGHIJKLMNOP")
print(productBarcode)
연관값이 될 수 있는 것들
enum SomeEnum {
case doSomething
case saySomthing(word : String = "")
case sayHello(String) // String
case sayGoodBye(String?) // 옵셔널
case someAction(action: () -> Void) // Closure
case someValues(values: (name:String, age:Int) // 튜플
}
위와 같이 다양한 값이 연관값으로 들어올 수 있다.
연관값 접근 및 사용
열거형 케이스에 저장된 연관값에 접근하려면 switch 구문이나 if case 구문을 사용하여 접근할 수 있다.
1. switch 구문을 사용한 접근
switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let checkDigit):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(checkDigit)")
case .qrCode(let productCode):
print("QR 코드: \(productCode)")
}
2. if case 구문을 사용한 접근
if case let Barcode.qrCode(code) = productBarcode {
print("QR 코드: \(code)")
}
연관값과 일반 값의 차이
연관값은 열거형의 각 인스턴스와 함께 저장되는 값이다.
반면 일반적으로 enum의 경우 각 케이스 자체에 값이 할당되며 모든 인스턴스가 동일한 값을 가지게 된다.
일반적인 enum 값
enum Planet: Int {
case mercury = 1, venus, earth, mars
}
연관값을 가진 enum
enum MediaType {
case audio(String)
case video(String)
}
let audioFile = MediaType.audio("mp3")
let videoFile = MediaType.video("mp4")
이 경우 각 케이스는 문자열 형태의 연관값을 가지며, 서로 다른 데이터를 가질 수 있다.