[iOS / Swift] Swift 문법을 알아보자! - 15편 : enum(열거형)

프린스송·2021년 7월 5일
1

Swift 문법

목록 보기
15/21
post-thumbnail
post-custom-banner

안녕하세요~~ 벌써 스위프트 문법도 15번째 포스트입니다. 언제가 마지막이 될지는 모르겠지만 항상 초심을 잃지 않고 열심히 공부를 해야겠습니다. 오늘은 스위프트에서 자료형의 한 종류인 열거형에 대해 공부를 해보겠습니다!


열거형인 enum은 enumerations의 약자입니다. 애플 개발자 문서에서는 enumerations를 다음과 같이 정의합니다. "열거형에서는 관련 값 그룹의 공통 유형을 정의하며 코드 내에서 형식별로 안전한 방식으로 값을 사용할 수 있습니다." 쉽게 한마디로 정리해보면 관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체입니다.

열거형을 쓰는 이유

  • 원치 않는 값이 잘못 입력되는 것 방지
  • 입력 받을 값이 한정되어 있을 때
  • 특정 값 중 하나만 선택하게 할 때

열거형의 형태

열거형의 형태는 다음과 같습니다.

enum 열거형명 {
	//열거형 정의
}

enum Compass {
	case North
    case South
    case East
    case West
}

//하나의 case문에 멤버들 나열하는 것도 가능
enum Compass {
	case North, South, East, West
}

위의 코드는 열거형을 정의하는 코드입니다. 첫번째는 열거형의 형태를 나타낸거고 두번째는 일반적인 열거형의 정의방법입니다. 보시다시피 case를 써서 정의를 할 수 있습니다. 세번째의 코드처럼 하나의 case문에 멤버들을 나열하는 것도 가능하죠.

그렇다면 이런 열거형에 어떻게 접근하는지 코드를 짜보고 실행을 해보겠습니다.

print(Compass.North)
var x : Compass = Compass.South
print(x)
x = .North
print(x)

클래스나 구조체에서 프로퍼티나 메소드에 접근하는 방식이랑 똑같은 방법으로 접근을 할 수 있습니다. 그리고 변수나 상수안에 열거형의 값들을 넣어줄 수도 있습니다. 약간의 차이점이라고 한다면 열거형에서는 프로퍼티에 .을 써 접근을 할 수 없었습니다. Compass를 상속받는 프로퍼티를 만들어도 x.South처럼 쓸 수 없다는 것이죠. 그리고 Compass라는 타입이 명확하다면 .North만 써서 열거형에 접근할 수 있습니다. 그럼 코드를 실행해보겠습니다.
잘 실행되었습니다.


열거형과 switch문

그리고 열거형은 스위치문과 같이 많이 쓰인다고 합니다. 열거형과 switch문이 같이 쓰일때 가장 큰 특징은 switch의 비교값에 열거형 타입이 위치할 때 모든 열거형 케이스를 포함한다면 default를 작성할 필요가 없다는 점입니다. 코드로 살펴보죠!

switch x {
case .North:
    print("북")
case .South:
    print("남")
case .East:
    print("동")
case .West:
    print("서")
}

위에 코드에서 x = .North라고 해주었으므로 "북"이 출력됩니다.


열거형 안의 메소드

열거형 안에는 메소드를 쓸 수도 있습니다.

enum Week : String {
***
## 열거형의 rawValue
열거형의 멤버들은 정수값을 가질 수도 있습니다. rawValue를 사용하면 됩니다. case별로 각각 다른 값을 가져야합니다
   case Mon, Tue, Wed, Thur, Fri, Sat, Sun
   
    func printWeek() {
        switch self {
        case .Mon, .Tue, .Wed, .Thur, .Fri:
            print("주중")
        case .Sat, .Sun:
            print("주말")
        }
    }
}

Week.Sun.printWeek()
Week.Tue.printWeek()

Week 열거형 속에 일곱 요일을 멤버로 정의하고 안에 주말이냐 주중이냐를 출력해주는 메소드를 만들었습니다. 실행을 해보면 잘 실행되는 것을 확인할 수 있었습니다.


열거형의 rawValue

열거형의 멤버들은 정수값을 가질 수도 있습니다.중요한 점은 case별로 각각 다른 값을 가져야합니다. 이것을 바로 rawValue라고 부릅니다.

//Int형 rawValue
enum Color: Int {
    case red = 1
    case green = 2
    case blue = 3
}

print(Color.red)            // red
print(Color.red.rawValue)   // 1
print(Color.blue)           // blue
print(Color.blue.rawValue)  // 3

위 코드에서 확인할 수 있듯이 각 case에 rawValue를 정해주었습니다. 이 값들은 .rawValue로 접근이 가능한 것을 확인할 수 있었습니다. 마치 딕셔너리와 비슷한 구조이군요!

enum Color: String {
    case red = "빨"
    case green = "초"
    case blue
}

print(Color.red)            //red
print(Color.red.rawValue)   //빨
print(Color.blue)           //blue
print(Color.blue.rawValue)  //blue

이렇게 정수형 뿐만아니라 문자열 rawValue도 설정을 해줄 수 있습니다. 여기서 중요한 점은 만약 rawValue값을 지정해주지 않았다면(위 코드에서는 blue) .rawValue값이 그냥 멤버 이름으로 나온다는 것입니다.


오늘은 열거형에 대해 알아보았습니다. 데이터들을 잘 관리하기 위해서는 꼭 잘 알고 넘어가야 겠습니다. 그럼 오늘도 수고 많으셨습니다!

profile
[iOS / Swift] [React Native]
post-custom-banner

0개의 댓글