티스토리 뷰

오늘은 열거형에 대해 알아보려 합니다!!

 

열거형


열거형(Enumerations) - 연관된 값을 그룹지어 정의 한 것으로, 코드 안에서 type-safe한 방식으로 그 값들을 사용할 수 있게 해줌.  예) 동서남북 등..

 

- 특징

  • enum자체가 하나의 데이터 타입
  • 각 case는 그 자체가 고유한 값
  • case의 경우 한 줄에 여러개 정의 가능
enum CompassPoint {
    case north
    case south
    case east
    case west
}

이런식으로 한 줄 한 줄 case 작성해도 되고

 

enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, nranus, neptune
}

이렇게 한 줄 작성도 가능 합니다 ㅋ

 

● 열거형 사용

위에서 선언한 CompassPoint를 사용한다고 하면, 다음과 같이 사용할 수 있습니다. 

만약 타입이 명확할경우 열거형의 이름 생략이 가능 합니다. 지금 같은경우 처음에 enum 타입 변수를 생성했기 때문에 directionToHead의 타입이 명확하죠? 그래서 CompassPoint를 생략하고 사용 가능 합니다.

enum을 사용하면 좋은점은, enum타입 변수에 자신이 설정한 case를 제외한 값이 들어오지 못한다는 점 입니다. 

switch 문과 함께 사용하면 다음과 같이 사용할 수 있습니다. enum타입 사용시, 모든 케이스를 명시한다면 기존 switch문과는 다르게 default를 생략 가능 합니다.

var directionToHead = CompassPoint.north
        
directionToHead = .east
        
switch directionToHead {
    case .east:
        print("동쪽 입니다.")
    case .west:
        print("서쪽 입니다.")
    case .south:
        print("남쪽 입니다.")
    case .north:
        print("북쪽 입니다.")
}

 

● 열거형 With rawValue

열거형은 원시값을 갖을 수 있는데, 이때 원시값은 case 별로 다른 값을 가져야 합니다.

enum HTTPCode: Int {
    case OK = 200 // 정상적인 응답
    case Not_MODIFY = 304 // 캐싱된 데이터 전송
    case INCORECT_PAGE = 404 // 존재하지 않는 URL
    case SERVER_ERROR = 500 //서버 에러

    var value : String {
        return "HTTPCode number is \(self.rawValue)"
    }
    
    func getDescription() -> String {
        switch self {
        case .OK : return "응답이 성공했습니다. HTTP 코드는 \(self.rawValue) 입니다."
        case .Not_MODIFY : return "변경된 내역이 없습니다. HTTP코드는 \(self.rawValue) 입니다."
        case .INCORECT_PAGE: return "존재하지 않는 페이지입니다. HTTP코드는 \(self.rawValue) 입니다."
        case .SERVER_ERROR: return "서버 오류입니다. HTTP 코드는 \(self.rawValue) 입니다."
        }
    }
}

enum 타입의 HTTPCode를 하나 만들었습니다. 콜론 옆의 Int는 Int형 원시값을 갖는 열거형을 만들겠다는 의미 입니다.

각각의 case에서 Int형의 원시 값을 갖는 것을 볼 수 있는데, 이 원시값을 사용하기 위해서는 rawValue로 접근하면 됩니다.

그리고 열거형 안에 파라미터와 메서드 선언이 가능합니다.

let response = HTTPCode.OK
print(response.getDescription())
print(response.value)
print(HTTPCode.SERVER_ERROR.value)

결과 : 

 

이상 열거형에대한 정리를 마치겠습니다 :)

읽어주셔서 감사합니다.

 

참고)

docs.swift.org/swift-book/LanguageGuide/Enumerations.html

 

Enumerations — The Swift Programming Language (Swift 5.3)

Enumerations An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. If you are familiar with C, you will know that C enumerations assign related names to a set of in

docs.swift.org

댓글
링크
최근에 올라온 글
최근에 달린 댓글