DAY 04
Enum (열거형) 표현하기
Enum
Enumeration(열거형) 라는 뜻을 가진 Enum은 관련 있는 데이터들이 멤버로 구성되어 있는 자료형 객체
Enum 왜 사용하는가?
원치 않는 값이 잘못 입력되는 것 방지
입력 받을 값이 한정되어 있을 때
특정 값 중 하나만 선택하게 할 때
사용법
enum School {
case elementary
case middle
case high
// case elementary, middle, high
}
let yourSchool = School.elementary
print("yourSchool : \(yourSchool)")
output
yourSchool : elementary
Enum 변수의 Data type
yourSchool 변수 타입은 School 타입이다.
print(type(of:yourSchool))
output
School
문맥에서 타입의 추론이 가능한 시점에는 열거형 명 생략 가능
var x = School.elementary
x = .high
print(x)
output
high
아래와 같은 형식으로도 표현 가능
var sc : School
sc = .elementary
이러면 어떤 형식으로도 응용이 가능하냐면
switch sc {
case .elementary:
print("you are elementary school student")
case .middle
print("you are middle school student")
case .high
print("you are high school student")
}
Enum의 rawValue
enum Count : Int {
case a
case b = 3
case c
}
a 의 rawValue 는 0이고, b는 3이다
c의 rawValue 는 4가 된다
enum School : String {
case elementary = "초등학교"
case middle = "중학교"
case high
}
print(School.elementary)
print(School.high)
output
초등학교
high
Value를 지정하지 않은 경우 case이름이 할당됨
Enum의 Associated Value
enum Birth {
case intBirth(int, int, int)
case stringBirth(String)
}
var myBirth = Birth.intBirth(1999,12,30)
myBirth = Birth.stringBirth("1999년 12월 30일")
switch myBirth {
case .intBirth(let year, let month, let day):
print("\(year)년 \(month)월 \(day)일")
case .stringBirth(let str):
print(str)
}
output
1999년 12월 30일
switch-case 의 두번째 .stringBirth 에서 print(str) 에 따라 출력되었음
Optional 에서의 Enum
Optional 이란 변수에 값이 들어있을 수도 있고, 없을 수도 있다(nil)는 표현
? 라는 특수문자로 표현한다
public enum Optional<Wrapped> {
case none
case some(Wrapped)
}
다음과 같이 Optional method는 swift 내에 정의되어 있다
let value : Int? = nil
switch value {
case .none:
print("정보가 없습니다")
case .some(let a) where a % 2 == 0:
print("\(a) 는 짝수 입니다.")
case .some(let a) where a % 2 == 1:
print("\(a) 는 홀수 입니다.")
default:
print("default는 한정적인 값(열거형 등)이 아니면 반드시 작성해야 함")
}
Swift에서 기본 자료형을 nil로 초기화할 수 없다
let value : Int = nil // cannot initialize
nil cannot initialize specified type 'Int'
만약 실행시킨다면, 다음과 같은 오류를 발생시킨다
따라서 변수에 들어있는 값을 안전하게 꺼내 사용하기 위하여 Optional을 사용한다.
그리고 위와 같이 Optional은 Enum의 한 종류로 정의되어 있음
Reference
https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html
댓글