아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 31일차_열거형(1) 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 31일차_열거형(1)

바닐라머스크 2022. 2. 23. 23:22

열거형은 swift에서 강력한 기능 중 하나입니다.

오늘은 열거형의 정의와 활용법들에 대해 알아보겠습니다!

 

반응형

 

■ 열거형

  • 연관성이 있는 값을 모아 놓은 것
    → 관련 값의 그룹으로 타입을 정의하고, 코드에서는 타입-세이프 방법으로 값을 동작
  • enum 이라는 키워드 사용
    → 내부에는 case 키워드를 이용해 연관항목 나열 가능
  • 열거형을 만들게 되면 하나의 새로운 타입처럼 사용할 수 있음
    → 열거형 이름 정의시 대문자 카멜케이스를 사용
  • 열거형 내부 각각의 case 자체가 고유의 값임
    → 열거형내 case 정의시 소문자 카멜케이스를 사용
  • 기존 구현을 넘어 기능적 확장도 가능,
    표준 기능을 제공하기 위해 프로토콜 준수 또한 가능
enum 이름 {
           case 이름1
           case 이름2
           case 이름3, 이름4, 이름5
          …
}

// 열거형 정의 예시
enum Fruit: String {
    case apple = "사과"
    case orange = "오렌지"
    case pear = "배"
    case mango = "망고"
}

// 열거형 변수 생성
var fruit = Fruit.apple
// apple
fruit = .mango
// mango

 

■ 열거형의 다양한 활용방법 6가지 (1) ~ (3)

1) 열거형의 switch 구문 활용

  • switch 구문으로 열거형 값들을 매칭시킬 있음
     
    변수에 들어있는 열거형의 항목이 어떠한 항목인지 비교할 있음
  • 열거형 케이스를 고려시 switch구문은 완벽해야
    → 
    하나라도 case 해당하지 않는 값이 있을 경우, default 설정해줘야
switch fruit {
case .apple:
    print("사과는 아삭아삭")

case .orange:
    print("오랜지는 상큼상큼")

case .pear:
    print("배는 달달시원")

case .mango:
    print("망고는 달콤시원")
}
// 망고는 달콤시원


let someFruitMarket = Fruit.pear
switch someFruitMarket {
case .pear:
    print("[프리미엄] 산지직송 나주배 한박스에 8만원")

default:
    print("싸다싸 오늘 마지막 이가격! 전부 한박스당 1만원/1kg!")
}
// [프리미엄] 산지직송 나주배 한박스에 8만원

 

2) 열거형의 케이스 반복

  • 열거형의 모든 케이스를 수집하고자 경우 유용
  • 열거형 이름 뒤에 : CaseIterable 키워드를 추가하여 사용
  • allCases 프로퍼티를 사용하여 모든 케이스 수집 방출 가능
// 얼마나 많은 케이스가 존재하는지 계산해봄
enum Emotion: CaseIterable {
    case calm, hopeful, defiant, prepared, chilln
}

let numberOfEmotions = Emotion.allCases.count
print("This robot can express \(numberOfEmotions) emotions through dance ")
// This robot can express 5 emotions through dance

// for-in 루프를 사용하여 모든 케이스를 반복
for emotion in Emotion.allCases {
    print(emotion)
}

// calm
// hopeful
// defiant
// prepared
// chilln

 

3) 열거형의 연관값(associated values)

  • 열거형내 항목은 자신과 연관된 값을 가질 있음
    → 
    열거형내 케이스 값과 함께 다른 타입의 값을 함께 저장 가능
  • 연관값(해당 케이스) 코드에서 값으로 사용시 매번 달라짐
  • 연관값은 항목 옆에 소괄호로 묶어서 표현 가능
    → (연관값이 모두 상수나 변수로 추출될 경우) 
    case 이름 앞에 각각 var, let으로 한번에 선언 가능
     
    소괄호안의 연관값을 초기화 시켜  있음
  • 다른 항목이 연관값을 갖는다고 모든 항목이 연관값을 가질 필요는 없음
  • (연관값 포함한) 열거형 타입의 상수와 변수는 연관된 값으로 저장 가능하지만오직 하나의 값만 저장 가능
// 예를 들어, 한 지역의 주거현황으로 아파트가 있고 나머지는 곧 재건축이 들어간다고 가정
// 각 아파트단지의 세대수는 숫자형식, 나머지 재건축은 재건축 연합의 형태로 존재
enum ResidentialCondition {
    case apartment(Int, Int, Int, Int)
    case reconstruct(String)
}

// residentialcondition 이라는 새로운 변수 생성, 연관값인 (597, 1140, 55, 656)을 ResidentialCondition.apartment의 값으로 할당
var residentialcondition = ResidentialCondition.apartment(597, 1140, 55, 656)
residentialcondition = .reconstruct("모아타운")

// switch구문을 이용하여 관련값을 스위치 구문의 일부로 추출
switch residentialcondition {
case .apartment(let xi, let lottecastle, let prugio, let ipark):
    print("Apartment: \(xi), \(lottecastle), \(prugio), \(ipark).")
case .reconstruct(let moatown):
    print("Reconstruction: \(moatown).")
}
// Reconstruction: 모아타운.

switch residentialcondition {
case let .apartment(xi, lottecastle, prugio, ipark):
    print("Apartment: \(xi), \(lottecastle), \(prugio), \(ipark)")
case var .reconstruct(moatown):
    print("Reconstruction: \(moatown).")
}
// Reconstruction: 모아타운.

 

열거형에서의 원시값과 초기화, 재귀 열거형, 메서드 활용에 대해서는 다음편에서 정리해보겠습니다~

 

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 fast campus강의  참조자료

[1] https://blog.yagom.net/553/

[2] https://bbiguduk.gitbook.io/swift/language-guide-1/enumerations

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.