[Swift 5/부스트 코스] iOS 프로그래밍을 위한 스위프트 기초 - 열거형(1-15) 생각해보기
안녕하세요. 개발하는 정주입니다.
오늘은 부스트 코스 열거형 1-15의 생각해보기에 대해 포스팅하려고 합니다.
http://www.boostcourse.org/mo122/lecture/11273
열거형
Swift의 열거형은 C, 자바 같은 다른 언어의 열거형과 많이 다르고 강력한 기능을 지니고 있습니다.
유사한 종류의 여러 값을 한 곳에 모아서 정의한 것입니다.
enum 이름 {
case 이름1
case 이름2
case 이름3, 이름4, 이름5
// ...
}
열거형은 enum으로 정의 가능하며 enum 자체가 하나의 데이터 타입입니다.
열거형 이름은 대문자 카멜케이스를 따르고 각 케이스는 소문자 카멜 케이스를 따릅니다.
각 케이스는 정수가 아닌 그 자체가 고유의 값이고 한 줄에 하나씩도 정의 가능하고 여러 개를 한 번에 정의할 수도 있습니다.
열거형이 어울리는 예시
1. Weekday
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
요일은 구분이 명확하고 추가될 가능성도 없고 property로 가질만한 것도 마땅히 없다. 따라서 enum이 어울린다고 판단했다.
2. Month
enum Month {
case dec, jan, feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
}
Month도 마찬가지로 추가될 가능성도 없으며 property로 가질만한 것도 없어서 enum이 어울린다고 판단했다.
열거형이 어울리지 않는 예시
1. BoostCamp
enum BoostCamp {
case iosCamp
case androidCamp
case webCamp
}
BoostCamp는 class나 structure가 더 어울린다고 생각합니다.
BoostCamp의 이름만 사용한다면 열거형으로 사용할 수도 있겠지만 이름, 날짜, 대상 등의 property가 존재할 수 있습니다. 추후 추가될 가능성도 높겠죠.
따라서 class나 structure가 더 자연스럽다고 생각했습니다.
2. School
enum School: String {
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university
}
School도 enum 보다는 class나 structure가 더 어울릴 것 같습니다. BoostCamp와 동일한 이유인데요.
enum을 이용해 단순히 초등, 중등, 고등, 대학교로 나눠 사용하는 것보다는 property를 추가하여 사용하는 게 활용성이 높다고 생각합니다. 초등, 중등 등을 나누는 상황에서는 학년, 반 등도 나올 가능성이 높고 당장 안 들어가도 추후 확장될 가능성도 있기 때문입니다.
3. Fruit
enum Fruit: Int {
case apple = 0
case grape = 1
case peach
// mango와 apple의 원시값이 같으므로
// mango 케이스의 원시값을 0으로 정의할 수 없습니다
// case mango = 0
}
Fruit는 enum으로 사용하기 애매한 케이스입니다. 과일 가게라고 생각한다면 과일 이름과 가격을 맵핑할 수 있는 Dictionary가 유용하다고 생각합니다. enum과 switch문을 이용해 가격을 출력하는 것보다 Dictionary로 관리하는 게 직관적이고 편리할 것입니다.
또한 과일 종류가 없어지거나 추가될 가능성도 있습니다. enum을 이용한다면 case를 추가하고 switch문에 처리 코드를 추가해야하는 번거로움이 있습니다.
Dictionary를 사용한다면 멤버를 묶어서 추가하면 됩니다.
마무리 잡담
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.