🔥 열거형 Case 순회하기
Swift 에서 열거형(Enumeration)은 관련된 값들을 그룹화하여 표현하는 강력한 타입입니다. 때로는 열거형의 모든 case 들을 컬렉션으로 다루는 것이 유용할 수 있는데요, 이번에는 그 방법에 대해 알아보도록 하겠습니다.
열거형 이름 뒤에 : CaseIterable
을 작성하면, 해당 열거형의 모든 case 들을 allCases
속성을 통해 컬렉션으로 접근할 수 있게 됩니다. 아래 예제를 함께 살펴보시죠.
enum Beverage: CaseIterable { case coffee, tea, juice } // allCases 속성을 통해 모든 case의 개수를 셀 수 있습니다. let numberOfChoices = Beverage.allCases.count print("\(numberOfChoices) beverages available") // "3 beverages available" 출력
swift
위 예제에서 Beverage.allCases
를 사용하여 Beverage
열거형의 모든 case를 포함하는 컬렉션에 접근했습니다. allCases
는 다른 컬렉션과 마찬가지로 사용할 수 있으며, 컬렉션의 요소들은 열거형 타입의 인스턴스입니다. 여기서는 Beverage
값들이겠죠.
위 예제는 case의 개수를 세었고, 아래 예제에서는 for
-in
반복문을 사용하여 모든 case를 순회합니다.
for beverage in Beverage.allCases { print(beverage) } // coffee // tea // juice
swift
열거형 이름 뒤에 작성한 : CaseIterable
문법은 해당 열거형이 CaseIterable
프로토콜을 준수함을 나타냅니다. 프로토콜에 대한 자세한 내용은 Protocols 문서를 참고해 주세요.
이렇게 CaseIterable
프로토콜을 채택하면 열거형의 모든 case를 손쉽게 다룰 수 있게 되는 것이죠. 예를 들어, 아래와 같이 열거형의 모든 case를 출력하는 함수를 작성할 수 있겠습니다.
func printAllCases<T: CaseIterable>(_ type: T.Type) { // 열거형의 모든 case를 순회하며 출력합니다. for value in T.allCases { print(value) } } printAllCases(Beverage.self) // coffee // tea // juice
swift
CaseIterable
프로토콜은 Associated Value를 가지는 열거형에는 사용할 수 없다는 점에 주의하세요. Associated Value에 대해서는 별도로 다루어 보도록 하죠.
열거형의 case를 컬렉션으로 다루는 기능은 다양한 상황에서 활용할 수 있습니다. 예를 들면:
- 설정 화면에서 선택 가능한 옵션 목록을 열거형으로 관리하고,
allCases
를 통해 UI에 표시 - 게임 캐릭터의 종류를 열거형으로 정의하고,
allCases
를 이용해 랜덤한 캐릭터 생성 - 테스트 케이스를 열거형으로 표현하고,
allCases
로 모든 케이스 실행
등등 열거형과 CaseIterable
의 조합은 코드를 더욱 간결하고 가독성 있게 만드는데 도움을 줍니다.
열거형을 순회하는 방법을 익혔으니, 열거형을 활용하는 재미있는 예제 코드를 만들어볼까요?
enum Operation: CaseIterable { case add, subtract, multiply, divide // 열거형의 case에 따라 실제 연산을 수행하는 메서드를 정의합니다. func perform(on a: Int, and b: Int) -> Int { switch self { case .add: return a + b case .subtract: return a - b case .multiply: return a * b case .divide: return a / b } } } // 순회하며 모든 연산을 수행합니다. for operation in Operation.allCases { let result = operation.perform(on: 10, and: 5) print("\(operation): \(result)") } // add: 15 // subtract: 5 // multiply: 50 // divide: 2
swift
위 예제는 사칙연산을 나타내는 Operation
열거형을 정의하고, CaseIterable
을 채택하여 모든 case를 순회하며 연산을 수행하는 모습을 보여줍니다. 열거형의 case에 따라 서로 다른 연산을 수행하도록 perform(on:and:)
메서드를 구현했는데요, 이렇게 열거형과 메서드를 결합하면 타입에 따라 다른 동작을 캡슐화하는 효과를 얻을 수 있습니다.
이처럼 CaseIterable
프로토콜은 열거형을 더욱 편리하게 다룰 수 있는 기능을 제공하오니, 열거형을 설계할 때 적극 활용해 보시기 바랍니다. 열거형은 단순한 값의 모음 그 이상으로, 코드의 의도를 명확히 하고 추상화를 높이는 강력한 도구임을 기억해 주세요!