Search

열거형의 원시값과 연관값

열거형(Enumeration, Enum)은 데이터 타입을 정의하고 특정 데이터 집합을 쉽게 관리할 수 있습니다. 열거형을 사용하면 코드의 가독성을 높이고 오류를 줄일 수 있습니다. 특히 단순히 값을 나열하는 것 이상의 기능을 제공하므로 이번 글에서는 원시값(Raw Value)과 연관값(Associated Value)의 차이와 각각의 사용 방법을 살펴보겠습니다.

목차

열거형이란?

열거형은 관련된 값을 하나의 그룹으로 정의하는 데이터 타입입니다.
enum Weekday { case monday case tuesday case wednesday case thursday case friday case saturday case sunday }
Swift
복사
위와 같이 정의된 Weekday 열거형은 월요일부터 일요일까지의 요일을 나타낼 수 있습니다. 이렇게 하면 Weekday 타입을 사용해 요일을 명확하게 표현할 수 있어 코드의 가독성을 크게 높일 수 있습니다.

원시값(Raw Value)이란?

원시값은 열거형의 각 케이스에 고유한 값을 할당하는 방식입니다. 보통 정수나 문자열 같은 간단한 타입을 사용하며 각 케이스에 기본 값을 부여하여 값과의 매핑이 가능해집니다.
enum Weekday: Int { case monday = 1 case tuesday case wednesday case thursday case friday case saturday case sunday }
Swift
복사
위 코드에서 Weekday의 각 케이스는 monday = 1로 시작하여 자동으로 증가합니다. 따라서 tuesday는 2, wednesday는 3의 값을 가지며 이를 통해 열거형 값과 숫자 간의 매핑이 간단해집니다.
원시값은 다음과 같은 상황에서 유용합니다.
데이터베이스와의 매핑
데이터베이스의 값과 열거형을 매핑할 때
상수 정의
케이스마다 고정된 값이 필요할 때
원시값을 사용하여 열거형을 초기화할 수도 있습니다.
if let day = Weekday(rawValue: 3) { print("선택된 요일: \(day)") // 선택된 요일: wednesday }
Swift
복사

연관값(Associated Value)이란?

연관값은 각 열거형 케이스가 추가적인 데이터를 가질 수 있도록 하는 기능입니다. 원시값과 달리 연관값은 각 케이스마다 서로 다른 타입의 데이터를 가질 수 있으며 열거형의 케이스가 선택될 때마다 해당 데이터를 지정합니다.
예를 들어 배달 상태를 나타내는 열거형을 정의해 보겠습니다.
enum DeliveryStatus { case pending case shipped(trackingNumber: String) case delivered(date: String) case cancelled(reason: String) }
Swift
복사
DeliveryStatus 열거형은 배달 상태를 나타내며 각 상태에 따라 추가적인 정보를 가질 수 있습니다. 예를 들어, shipped 케이스는 추적 번호를, delivered 케이스는 배송 날짜를 저장합니다.
연관값은 다음과 같이 사용할 수 있습니다.
let status = DeliveryStatus.shipped(trackingNumber: "12345XYZ") switch status { case .pending: print("배송 준비 중입니다.") case .shipped(let trackingNumber): print("배송 중입니다. 추적 번호: \(trackingNumber)") case .delivered(let date): print("배송 완료 날짜: \(date)") case .cancelled(let reason): print("배송이 취소되었습니다. 이유: \(reason)") }
Swift
복사
각 배달 상태에 따라 다른 정보를 제공할 수 있으며 필요한 상황에 맞춰 데이터를 동적으로 저장하고 처리할 수 있습니다. 연관값은 다양한 데이터를 저장할 수 있어 유연성이 높습니다.

원시값과 연관값의 차이

원시값
각 케이스에 고정된 값을 할당하며 보통 정수나 문자열 같은 간단한 타입을 사용합니다. 주로 열거형 케이스에 명확하고 불변의 값이 필요할 때 사용합니다.
연관값
각 케이스에 추가적인 데이터를 동적으로 할당할 수 있으며 케이스마다 다른 타입의 값을 가질 수 있습니다. 상황에 따라 다채로운 정보를 저장하고자 할 때 사용합니다.

언제 사용해야 할까?

원시값
각 케이스가 정해진 값을 가져야 하며 이를 통해 데이터베이스 매핑이나 상수 정의가 필요한 경우
연관값
각 케이스가 상황에 따라 다른 데이터를 가질 필요가 있는 경우

마무리

Swift의 열거형은 단순한 그룹 이상의 강력한 기능을 제공하며 이를 통해 가독성 높고 유지보수가 쉬운 코드를 작성할 수 있습니다. 원시값은 고정된 값을 다룰 때 유용하며 연관값은 각 상황에 따라 동적으로 데이터를 저장하고자 할 때 적합합니다.