enum은 열거형(Enumerations)의 줄임말로, 서로 관계있는 값들을 모아서 표현해 놓은 것으로 특정 타입을 표현할 때 사용하기 좋다. 애플 개발자 문서 swift enum 정의를 해석해 보면
열거 형은 관련된 값의 그룹에 대한 공통 유형을 정의하고
코드 내에서 유형 안전한 방식으로 해당 값을 사용할 수 있게 해 줍니다.
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/enumerations/
Documentation
docs.swift.org
열거형 : 관련된 값으로 이루어진 그룹을 공통의 형으로(type) 선언해 형 안전성(type-safety)을 보장하는 방법으로 코드를 다룰 수 있게 해 준다. 특정 그룹 내에서 관련 있는 값들의 집합을 표현하는 데 사용된다. enum 을 사용하면 코드의 가독성을 향상시킬 수 있으며, 예상치 못한 값이나 오류를 줄일 수 있다.
C나 Objective-C가 Integer값 들로 열거 형을 구성한 것에 반해 Swift에서는 case값이 string, character, integer, floting 값들을 사용할 수 있다. 열거형은 1급 클래스 형(first-class types)이어서 계산된 프로퍼티(computed properties)를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용할 수 있다.
enum 키워드를 사용하며, 다음과 같이 요일을 case로 갖는 열거형을 정의할 수 있다. enum은 타입이므로 대문자 카멜케잉스를 사용하여 이름을 정의하고, 각 case는 소문자 카멜케이스로 정의한다. 각 case는 그 자체가 고유의 값이다.
각 여러 case는 콤마(,)로 구분하여 한 줄에 적을 수 있다.
// enum 키워드를 사용하여 열거형을 정의
enum someEnum { // 열거형명
// 열거형 정의
}
// case로 요일을 가지는 enum 정의
enum WeekDay {
case mon
case tue
case wed
case thu
case fri
}
var today: WeekDay = .fri
// var today: weekDay = Weekday.fri
// 여러 case를 콤마(,)로 구분하여 한줄 작성
enum WeekDay {
case mon, tue, whe, thu, fri
}
열거형은 case 기본 값을 할당하지 않는다. 열거형의 이름은 다른 타입들과 마찬가지로 대문자로 시작해야 하며, 열거형으로 정의된 변수가 해당 열거형 타입으로 한 번 정의가 되면 다음에 값을 할당할 때 형을 생략한 점 문법(dot syntax)을 이용해 값을 할당하는 축약형 문법을 사용할 수 있다.




열거형으로 타입이 지정된 경우 .(점문법)을 이용해 내가 선언한 case에 한해서만 접근할 수 있다.
또한 타입을 정해줌으로써 String 대신 enum을 사용하면 오타의 가능성을 줄여 에러 발생을 줄일 수 있고, 코드의 가독성도 높아진다.
다른 예로 방향을 나타내고 싶을 때 "동, 서, 남, 북"과 같은 제한된 선택지를 표현하고 싶을 때 이런 경우에 enum을 사용하면 정확하고 안전하게 코드를 작성할 수 있다. 이처럼 enum은 제한된 선택지를 표현하고자 할 때 유용하게 사용된다.

연관값 혹은 관련값(associated value)을 가지고 있는 형태로 표현도 가능하며,
열거형의 각 case에는 custom type의 추가적인 정보를 저장할 수 있다.
// 미디어 타입 enum
enum MediaType {
case audio
case video
}
var mediaType: MediaType = .audio
// 미디어 타입에, 파일 확장자를 문자열로 받을수 있게 수정
enum MediaType {
case audio(String)
case video(String)
}
var mp3: MediaType = .audio("mp3")
var h264: MediaType = .video("h264")

원시값, Raw값 (Raw Values) : enum을 표시할 때 value를 할당해서 표시해야 할 때도 있음
Raw 값은 String, Character, Integer, Float 등의 타입을 사용할 수 있다.
각 Raw 값은 열거 형 내에서 고유한 값을 가져야 하며, Raw 값은 rawValue를 사용하여 접근할 수 있다.
- Int 타입의 경우 위의 케이스부터 0부터 시작. 일부 case에 값이 지정되지 않아도 자동으로 값 증가

- String 타입의 경우 case을 따르거나, 새로 지정할 수 있음. case에 값이 지정되지 않아도 텍스트가 자동으로 raw 값으로 할당



enum의 특징
- They are stored in stack
- They have no inheritance
- They don’t require explicit initializer
- They can conform to protocols
- It can have extensions
- It even can have methods and computed properties(not stored!)
- And it can be used with generic types
- enum은 struct와 같이 value-type이다.
enm 열거형을 쓰는 이유
- 입력받을 값이 한정적일 때
- 오타의 가능성을 줄여 에러 발생 방지
- 특정 값 중 하나만 선택할 때
- 코드의 가독성
그 외 Switch문을 이용하면 enum의 다양한 기능을 활용할 수 있다.
각 열거형 값을 Switch 문에서 매칭할 수 있고, switch 문은 반드시 열거형의 모든 case를 완전히 포함한다고 한다.
만약 모든 case 처리를 하지 않아도 된다면, switch 구문의 default case를 이용.
해당 내용은 Switch문 학습 후 추가 작성.
'IOS > Swift' 카테고리의 다른 글
| [Swift] 옵셔널(Optional), 타입캐스팅(Typecasting) (0) | 2025.06.17 |
|---|---|
| [Swift] 제어문(Control Flow) - 조건문(Conditions), 반복문(Roops) (0) | 2025.06.16 |
| [Swift] 연산자(Operator) (0) | 2025.06.14 |
| [Swift] 컬렉션 타입(Collection Types) - Array, Dictionary, Set, tuple (1) | 2025.06.11 |
| [Swift] Swift 기본 (0) | 2025.06.07 |