Swift(19) Enum

개발렬·2023년 7월 31일
0

Swift

목록 보기
19/23
post-thumbnail

"정의된 것이 아닌 할당된 것!"

  • 열거형은 하나의 주제로 연관된 데이터들을 집합하는 자료형입니다.

열거형은 객체를 정의하는 시점에서 함께 정의되므로, 데이터를 삭제하거나 변경하는 것이 용이하지 않습니다. 만약 삭제하려면 직접 코드를 수정해야 합니다. 이러한 특성은 오타나 실수가 발생했을 때, 컴파일 오류로 바로 확인할 수 있어 런타임 오류보다 오류를 발견하고 수정하기가 더 쉽습니다.

  • 연관된 데이터들의 예
enum CoffeeType {
    case americano
    case latte
    case cappuccino
    case mocha
}

enum Job {
    case warrior
    case mage
    case archer
    case healer
}

Swift의 열거형은 몇 가지 값을 가지는 타입을 정의하여 데이터를 그룹화하는데 사용됩니다. 이를 통해 코드를 더욱 안전하게 작성하고 유지 보수하기 쉽게 만들 수 있습니다.

또한, 열거형은 switch 문과 함께 사용하여 다양한 경우를 처리하기에도 용이합니다. 열거형의 각 case에는 고유한 값과 연관된 데이터를 가질 수 있으며, 이를 활용하여 다양한 상황에 대응할 수 있습니다.

func getPrice(for coffee: CoffeeType) -> Int {
    switch coffee {
        case .americano:
            return 3000
        case .latte:
            return 3500
        case .cappuccino:
            return 3200
        case .mocha:
            return 3800
    }
}

switch 구문을 활용하자

열거형 타입을 switch 구문에서 사용할 수 있습니다.

  • 여기서는 case 블록을 전부 비교한다면 default 구문을 생략할 수 있습니다.
    switch 구문에서는 defalut 블록을 추가한다면, 모든 멤버를 다 비교할 필요가 없습니다. 꼭 비교할 멤버만 비교하고 나머지는 default 구문에서 처리하면 됩니다.

연관값(Associated Value)

각 case에 다른 타입의 값을 연결하여 보관하는 기능을 말합니다. 즉, 각 case가 특정 값을 가지도록 할 수 있습니다.

enum CarStatus {
    case stopped
    case moving(speed: Double)
    case parked(isHandbrakeOn: Bool)
}

// 연관값 사용하기
switch movingCar {
case .stopped:
    print("자동차가 정지 중입니다.")
case .moving(let speed):
    print("자동차가 주행 중이며, 주행 속도는 \(speed) km/h 입니다.")
case .parked(let isHandbrakeOn):
    if isHandbrakeOn {
        print("자동차가 주차 중이며, 손잡이 브레이크가 켜져 있습니다.")
    } else {
        print("자동차가 주차 중이며, 손잡이 브레이크가 꺼져 있습니다.")
    }
}

switch 문을 사용하여 각 상태에 따른 정보를 출력하고 있습니다. 이를 통해 열거형의 각 case에 연관값을 활용하여 더 다양하고 유용한 정보를 표현할 수 있습니다.

rawValue(원시값)

문자열 형식의 멤버에 할당된 값을 읽을 때 사용됩니다.

대표적인 예시 코드를 HTTP 응답 코드입니다.

enum HTTPResponseCode: String {
    case success = "200 OK"
    case notFound = "404 Not Found"
    case internalServerError = "500 Internal Server Error"
}

let responseCode = HTTPResponseCode.success
print("응답 코드: \(responseCode.rawValue)") // 출력: "응답 코드: 200 OK"

위의 예시에서 HTTPResponseCode는 HTTP 응답 코드를 나타내는 열거형으로, 각 응답 코드에 해당하는 문자열을 rawValue로 할당하였습니다. rawValue를 사용하여 문자열 형식의 멤버에 할당된 값을 읽을 수 있습니다.

profile
Flutter, iOS...나는 모바일 앱 개발자

0개의 댓글