Dog foot print

[SWIFT] enumeration 본문

IOS/Swift

[SWIFT] enumeration

개 발자국 2021. 7. 21. 11:09

Enumeration

한국에서는 열거형 이라고 불리우는 Enumeration은 객체와 구조체과 비슷하지만, 그 사용 용도나 기능은 훨씬 제한적인 자료형이다. 열거형은 특정 상수들의 집합을 의미하며, 여기서 특정 이란 어떤 분류에 속해 있다는 의미이다. 예를 들면 집합은 다음과 같다.

  • 성별
    • 남자, 여자, 기타
  • 대구시의 행정구청
    • 달서구, 서구, 달성군, 북구, 중구, 수성구, 동구
  • 방향
    • 동,서,남,북
  • 국가코드
    • 82,32,42,52,62,75

위의 조합을 가진 구조체나 객체를 만들어 더욱 강력한 기능을 만들어 내는 것도, 나쁘지 않아 보인다. 그러나, 위의 조합을 사용할 때는 항상 인스턴스화 가 선행되어야 하고, 이는 프로젝트 규모가 커질수록 개발자의 실수로 인하여, 런타임 오류 혹은 컴파일 오류 가 발생하기 쉽다. 그러나, 열거형의 경우 인스턴스화가 필요하지 않고 컴파일 당시에도 멤버가 정의되어 있기 때문에 오류의 가능성이 매우 줄어든다.

열거형의 정의

enum [이름] {
    case 멤버값1
    case 멤버값2
  case 멤버값2
}

스위프트에서 열거형을 정의하기 위해서는 키워드 enum을 사용한다. 포함하는 값들은 varlet 대신 case 라는 키워드로 해당 열거형의 값임을 표현한다.

열거형의 값 사용

enum Gender{
    case male 
    case female
  case others
}

let male = Gender.male //
let female : Gender = Gender.female //
let others : Gender = .others //

열거형 값에 접근할때는 열거형 뒤에 . 을 붙여 값의 이름을 작성하여 접근합니다. 또한 해당 값들은 실제로 Int, String일지라도 속하고 있는 열거형 이 타입 입니다. 그래서 변/상수에 열거형 타입을 명시해주었다면 열거형 이름을 생략하고, .값 의 형태로 접근 할 수 있습니다.

Switch와 enumeration

enum Gender{
    case male 
    case female
  case others
}

let myGender = Gender.male //

switch male{
    case .male : 
        print("남자")    
    case .female : 
        print("남자")
    case .others : 
        print("남자")
}

Switch 구문에 대상이 enum 타입이라면 case구문에서 .값 형태로 case를 나열 할 수 있습니다.

열거형의 활용

열거형 또한 연산 프로퍼티나, 메서드를 정의 할 수 있습니다.

enum Mypaths{
    case login(id) 
    case join

    var currentPath :String {
       return self.route()
  }

    func route() -> String{
        switch self{
            case .login(id : String)
                return "/account/login?id=\(id)"
            case .join
                return "/account/join"
        }
    } 
}

var path : Mypaths = .join
print(path.currentPath) //"/account/join"
print(path.route())//"/account/join"
path = .login("gogo");
print(path.route())//"/account/login?id=gogo"
반응형

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

[Swift] 동기적 작업과 비동기적 작업  (0) 2021.09.20
[SWIFT] protocol  (0) 2021.07.21
[SWIFT] 초기화  (0) 2021.07.20
[SWIFT] Type casting  (0) 2021.07.20
[SWIFT] 상속  (0) 2021.07.15
Comments