열거형 (enum)

조정미·2024년 6월 9일

자습 일지

목록 보기
3/7
post-thumbnail

Enum은 관련된 값 여러 개를 같은 타입을 통해 그룹으로 묶어서 타입 안정성을 보장하는 방법이다.

열거형은 case를 통해 여러 개의 값을 넣어줄 수 있다.

  1. 열거형 사용 이유 : 숫자보다는 문자로 기억하는 것이 쉽기 때문
  2. 스위프트 열거형은 단순 배열이나 데이터 타입이 아니라 확장형이다
  3. 그래서 안에 함수를 넣을 수 있다.
  4. 그런 점에서 struct, class와 유사하다고 볼 수 있다.
enum Weekday {
	case mon
    case tue
    case wed
    case thu, fri, sat, sun 
    //여러 개의 케이스는 이렇게 ,로 나눠서 넣을 수도 있음
}

//열거형 인스턴스 생성 및 사용
var whatDay = Weekday.mon
var anotherWhatDay = whatDay // 값 복사

whatDay = .wed // 값을 변경해도 anotherWhatDay에는 영향 X

print(whatDay) // 출력값 wed
print(anotherWhatDay) // 출력값 mon

switch case 조건문과 연동 가능하다.

switch day { // day라는 enum 변수 넣기
	case .mon, .tue, .wed, thu :
    print("월화수목입니다.")
    
    case .fri, .sat  :
    print("금토입니다.")
    
    dafault:
    print("일요일입니다.")
} // 금토입니다.
enum Hero: Int {
	case Ironman = 0
    case Spiderman = 1
    case Huik // 자동으로 2가 들어감
// 일시 증가기 때문에
}

print(Hero.Ironman.rawValue) // 0
print(Hero.spidernman.rawValue) // 1
print(Hero.Huik.rawValue) // 2

열거형 안에 함수를 넣을 수 있다.

enun Month {
	case jan, fab, mar
    case apr, mat, jun
    case jul, aug, sep
    case oct, nov, dec
    
    func printMonth{
    	switch self {
        	case .jan, .feb, .mar:
            print("1~3월")
            
            case apr, mat, jun:
            print("4~6월")
            
            case jul, aug, sep:
            print("7~9월")
            
            case oct, nov, dec:
            print("10~12월")
        }
    }
}

그래서 나만의 예시를 만들어 enum 공부를 해보았다

enum Idol {
    case sungchan, wonbin, chanyoung
    case doyoung, jaehyun, jungwoo
    case wonyoung, yujin, rei
    
    
    
    func idolTeamName() -> String{
        switch self {
        case .sungchan, .wonbin, .chanyoung:
            return("라이즈")
            
        case .dooyoung, .jaehyun, .jungwoo:
            return("엔시티")
            
        case .wonyoung, .yujin, .rei:
            return("아이브")
        }
    }
    
    
    
}
let favoriteIdol = Idol.sungchan

print ("당신이 좋아하는 아이돌의 팀은 \(favoriteIdol.idolTeamName())입니다.")

  1. 먼저 'Idol'이라는 열거형을 정의한다. 열거형은 몇 가지 관련된 값을 그룹화하여 사용하는데 지금 난 다양한 아이돌 멤버들을 열거형 케이스로 정의하였다.

  2. Idol 열거형에 'idolTeamName'이라는 메서드를 정의한다. 이 메서드는 각 아이돌 멤버에 해당하는 팀 이름을 문자열로 반환하는 것이다.

여기서 self는 현재 인스턴스이며, switch self문을 통해 현재 인스턴스의 값을 검사한다. 때문에 각케이스에 대해 해당하는 팀 이름을 반환할 것이다.

  1. favoriteIdol라는 변수를 정의하여 열거형 속 특정 아이돌 멤버를 선택한다. 난 여기서 sungchan을 불러냈다.

  2. 선택한 아이돌의 팀 이름을 출력한다. idolTeamName() 메서드를 호출하여 팀 이름을 얻고 이를 문자열에 포함시켜 출력함

그리고... 클래스와 비슷하다고 했지만 사실 많이 다르긴 하다.
클래스는 상속이 가능하지만, 열거형은 불가능한데 왜냐하면 클래스는 참조형이고 열거형은 그냥 값 타입이기 때문이다.

더 복잡하게 나가자면 데이터가 저장되는 방식? 장소?도 다르고, 클래스 -객체 지향 프로그래밍 / 열거형 - 관련된 값의 집합을 표현으로 나뉜다는 점도 다르다.

0개의 댓글