Jupyo's Daily Story
열거형 (Enumeration) 본문
열거형이란?
열거형은 특정 타입에서 가질 수 있는 유한한 값의 집합을 정의하는 데이터 타입입니다. 예를 들어, 방향(동, 서, 남, 북)이나 요일(월, 화, 수 등)처럼 선택할 수 있는 값이 정해진 상황에서 열거형을 사용하여 코드의 가독성과 안정성을 높일 수 있습니다.
기본 열거형 선언
열거형을 선언할 때 enum 키워드를 사용합니다. 각 케이스(case)는 열거형이 가질 수 있는 값을 정의합니다.
Swift에서는 열거형 이름과 각 케이스 이름이 카멜 케이스(Camel Case)로 작성되는 것이 일반적입니다.
enum CompassDirection {
case north
case south
case east
case west
}
이 열거형은 나침반의 방향을 나타내는 CompassDirection 타입을 정의하며, north, south, east, west 라는 4개의 케이스를 가집니다.
사용 예시
var direction = CompassDirection.north
direction = .south // 열거형 타입을 알고 있으면 생략 가능
direction 변수는 CompassDirection 타입이며, 값으로 열거형의 한 케이스를 선택할 수 있습니다.
연관 값(Associated Values)
열거형의 각 케이스는 연관 값을 가질 수 있습니다. 이는 각 케이스에 추가적인 정보를 저장할 수 있게 해주는 기능입니다. 예를 들어, 열거형을 통해 다양한 데이터를 처리할 수 있습니다.
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
var productBarcode = Barcode.upc(8, 85909, 51226, 3)
productBarcode = .qrCode("QR123456")
- Barcode 열거형은 UPC 바코드의 경우 4개의 정수 값을, QR 코드의 경우 문자열 값을 연관 값으로 가집니다.
- 각 케이스에 맞는 데이터를 저장하고 활용할 수 있습니다.
연관 값 사용
switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(check)")
case .qrCode(let code):
print("QR Code: \(code)")
}
- switch 문을 사용해 열거형의 케이스와 연관 값을 처리할 수 있습니다.
- 각 케이스에 맞는 연관 값을 꺼내서 사용할 수 있습니다.
원시 값(Raw Values)
열거형의 각 케이스에 원시 값(raw value)을 할당할 수도 있습니다. 원시 값은 모든 케이스가 공통된 타입(정수, 문자열 등)을 가집니다. 각 케이스는 고유한 원시 값을 가지며, 이 값을 통해 열거형을 초기화할 수 있습니다.
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
let earth = Planet.earth.rawValue // 3
- Planet 열거형은 각 케이스에 정수 원시 값을 가집니다.
- venus, earth, mars 는 1부터 자동으로 값이 할당됩니다.
원시 값으로 초기화
let possiblePlanet = Planet(rawValue: 2) // venus
원시 값을 사용해 열거형의 인스턴스를 생성할 수 있습니다. 해당 원시 값이 없으면 nil을 반환합니다.
메서드 추가
Swift의 열거형은 단순한 값 집합뿐만 아니라 메서드를 가질 수도 있습니다. 이를 통해 열거형 내에서 추가적인 기능을 구현할 수 있습니다.
enum Beverage: String {
case coffee, tea, juice
func description() -> String {
switch self {
case .coffee:
return "Coffee is a popular drink."
case .tea:
return "Tea is soothing."
case .juice:
return "Juice is refreshing."
}
}
}
let myDrink = Beverage.coffee
print(myDrink.description()) // "Coffee is a popular drink."
- Beverage 열거형은 description 메서드를 가지고, 각 케이스에 대해 설명을 반환합니다.
열거형의 이점
- 안전성: 열거형을 사용하면 코드에서 사용 가능한 값들을 명확하게 정의할 수 있어 실수를 줄이고 코드의 안정성을 높입니다.
- 가독성: 값이 무엇을 의미하는지 명확히 알 수 있으므로 코드의 가독성이 향상됩니다.
- 유연성: 연관 값, 원시 값, 메서드 등을 사용해 다양한 기능을 구현할 수 있습니다.
비트마스크 및 플래그 열거형 (OptionSet)
열거형을 사용할 때, 여러 옵션을 동시에 선택할 수 있는 비트마스크 방식의 열거형도 구현할 수 있습니다. 이를 위해 Swift에서는 OptionSet 프로토콜을 제공합니다.
struct ShippingOptions: OptionSet {
let rawValue: Int
static let standard = ShippingOptions(rawValue: 1 << 0)
static let express = ShippingOptions(rawValue: 1 << 1)
static let sameDay = ShippingOptions(rawValue: 1 << 2)
}
let options: ShippingOptions = [.standard, .sameDay]
- OptionSet 을 사용해 열거형의 각 케이스가 비트 플래그로 처리됩니다.
- 비트 연산을 통해 여러 옵션을 동시에 선택하거나 해제할 수 있습니다.
'Swift' 카테고리의 다른 글
Announcing Swift 6 (2) | 2024.09.23 |
---|---|
옵셔널 (Optional) (2) | 2024.09.22 |
변수(Variable)와 상수(Constant) (0) | 2024.09.18 |
이진수(binary number) (0) | 2024.09.05 |
백그라운드 Playback (0) | 2024.02.20 |