아요 개발 일기

[Swift] Enum - 열거형 본문

Swift/Grammar

[Swift] Enum - 열거형

소진이 2023. 1. 29. 15:21

안녕하세요! 

이번에는 Enum 열거형에대해 공부해보도록하겠습니다 :)

해당 포스팅은 꼼꼼한 재은씨 Swift: 문법편을 참고하여 작성하였습니다.


Enum

  •  상속 불가
  •  값 타입 (값이 없을 수도 있음. 즉 이름 그 자체 만으로 고유한 의미를 나타낼 수 있음)
  •  유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의한 것 예) 요일, 상태값, 월(Month)
  •  열거형 자체가 하나의 데이터 타입
  •  열거형의 case 하나하나 전부 하나의 유의미한 값으로 취급

 

정의 및 구현

enum 열거형 이름 {
	//열거형 멤버 정의
    case 멤버값 1
    case 멤버값 2,3 // 한꺼번에 멤버 선언도 가능
    case ...
}

 

열거형 타입을 생략할 수 있을 때와 없을 때

 

1. 열겨형 타입으로 정의된 변수에는 열거형 타입명을 생략하고 멤버값만 대입해도 오류가 발생하지 않는다.

2. 변수나 상수의 타입 어노테이션을 명시한 경우, 처음부터 타입명을 생략하고 멤버값만 대입해도 오류가 발생하지 않는다.

3. 타입 어노테이션 없이 변수나 상수를 초기화할 때 타입명은 생략할 수 없다.

 

enum Direction {
	case north
    case south
    case east, west
 }
 
 // 멤버들 사용하기
 let N = Direction.north
 var S: Direction = Direction.south // 타입어노테이션 선언
 var S: Direction = .east // 열거형 타입 이름 생략 가능
 S = .east // 앞에서 타입이 선언되어 타입명을 생략하고 멤버값만 사용

 

 

Switch 문

Swiftch문은 반드시 열거형의 모든 경우(cases)를 포함해야합니다.

하지만, default 구문을 사용하면 모든 case를 포함하지 않아도됩니다.

enum Weekday {
    case mon
    case tue
    case wed
    case thu, fri, sat, sun
}

var day: Weekday = Weekday.mon
day = .tue

switch day { // day라는 열거형 값
case .mon, .tue, .wed, .thu:
    print("평일입니다")
case Weekday.fri:
    print("불금 파티!!")
case .sat,.sun:
    print("신나는 주말!!")
}

switch day { 
case .mon, .tue, .wed, .thu, .fri:
    print("평일입니다")
default:
	print("주말입니다")
 
}

 

Associated Values 

멤버에 보조 값을 설정하는 것을 연관 값(Associated Values)이라고 합니다.

enum ImageFormat {
	case JPEG
    case PNG(Bool)
    case GIF(Int,Bool)
}

var newImage = ImageFormat.PNG(true)
newImage = .GIF(256,false)

연관 값은 세부적으로 구분하기 위한 용도 이외에도 실행 시점에서 값을 저장해야 할 필요가 있을 때 사용됩니다.

 

rawValue 속성

문자열 형식의 멤버에 값을 할당할 수 있는데, 이때 rawValue 속성을 사용합니다.

정수 값만 지정하면 자동 할당 기능도 사용할 수 있습니다. 

enum Rank: Int {
    case one = 1
    case two, three, four
 }
 
 Rank.one.rawValue // 1
 Rank.two.rawValue // 2
 Rank.three.rawValue // 3
 Rank.four.rawValue // 4

 

'Swift > Grammar' 카테고리의 다른 글

[Swift] Function  (0) 2023.01.29
[Swift] Guard문  (0) 2023.01.29
[Swift] 조건문 - Switch case  (0) 2023.01.29
[Swift] Struct - 구조체  (0) 2023.01.27
[Swift] Class - 클래스  (0) 2023.01.27