Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

열거형 (Enumeration) 본문

Swift

열거형 (Enumeration)

JangJupyo 2024. 9. 19. 18:10
728x90
반응형

열거형이란?

열거형은 특정 타입에서 가질 수 있는 유한한 값의 집합을 정의하는 데이터 타입입니다. 예를 들어, 방향(동, 서, 남, 북)이나 요일(월, 화, 수 등)처럼 선택할 수 있는 값이 정해진 상황에서 열거형을 사용하여 코드의 가독성과 안정성을 높일 수 있습니다.

 

기본 열거형 선언

열거형을 선언할 때 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