열거형 Enum은 한정된 범위에서 가능한 값(케이스)를 정의하기 위해 사용하는 타입입니다
특히 스위프트의 열거형은 단순히 값의 목록을 나타내는 걸 넘어선 강력한 기능을 제공한다고 하는데요
코드의 가독성, 안전성, 유지보수성을 크게 향상시킬 수 있다고도 하네요
특히 "타입 안정성"을 보장한다고도 하는데요..
타입 안정성이라는 건 뭘까요?
🩵 타입 안정성
"타입 안정성을 보장한다" 라는 표현은
프로그램이 실행되는 동안에 타입에 대한 오류가 발생하지 않도록 하는 것을 의미합니다
개발자가 작성한 코드가, 시스템이 예상한 타입의 데이터만을 사용하도록 강제하여
런타임에 발생할 수 있는 타입 관련 오류를 최소화 해주는 것이죠
예를 들면, 정수형 타입 변수에 문자열을 할당하려고 하는 경우
타입 안정성을 지원한다면 컴파일 시점에 오류를 발생시켜서 개발자가 수정을 할 수 있도록 해줍니다
게다가 스위프트는 타입 안정성을 중요하게 여기는 언어 중 하나라고 하네요!!!
스위프트는 Strongly-typed 언어로, 변수나 상수에 할당되는 값의 타입이 명확해야 합니다
컴파일러가 타입 검사를 시행해서 타입의 불일치를 사전에 감지해요
그리고 필요한 경우에 타입을 명시적으로 작성하라고 요구하는 에러를 내보내기도 하죠
이런 강타입언어는 실행 시간에 발생할 수 있는 오류를 줄이는 데 큰 도움을 줍니다
🩵 열거형
열거형을 사용하는 것도 타입 안정성을 보장하는 방법 중 하나입니다
열거형을 사용한다면 특정한 값만 허용해서
잘못된 값이 사용되는 걸 막을 수 있어요
enum Family {
case mother
case father
case sister
case brother
}
가족 구성원을 나타내는 열거형을 예시로 만들어보았습니다
여기서는 mother, father, sister, brother 만이 사용 가능한 값이고
다른 값은 절대로 허용되지 않아요
이렇게 타입 안정성을 강화해서
개발자가 안전하고 견고한 코드를 작성할 수 있게 해줍니다!
🩵 사용방법
✔️ 정의하기
아래 두가지 다 가능한 방법입니다
enum Weekday {
case monday
case tuesday
case wednesday
case thursday
case friday
}
enum Weekday {
case monday, tuesday, wednesday, thursday, friday
}
✔️ 사용하기
today라는 변수는 Weekday라는 열거형 타입을 가집니다
그리고 월요일을 값으로 갖고 있네요
이렇게 열거형의 타입이 명확하다면 .monday 같이 케이스 앞에 열거형 이름을 생략할 수 있어요
var today: Weekday = .monday
✔️ 원시값
열거형을 정의할 때 해당 열거형의 각 케이스에 고유한 값을 지정해 줍니다
케이스를 더욱 명시적으로 표현하고, 쉽게 사용할 수 있게 됩니다
enum Season: String {
case spring = "Spring"
case summer = "Summer"
case autumn = "Autumn"
case winter = "Winter"
}
✔️ 연관값
열거형의 연관값은 각 케이스에 추가적인 정보를 나열할 수 있게 해 줍니다
연관값은 케이스별로 다른 타입을 가질 수 있어요
더 다양하고 복잡한 구조를 모델링 할 수 있겠죠?
enum Beverage {
case water
case soda(volume: Int)
case coffee(sugar: Bool, milk: Bool)
}
let myDrink = Beverage.coffee(sugar: true, milk: false)
func describe(beverage: Beverage) {
switch beverage {
case .water:
print("Plain water")
case .soda(let volume):
print("A soda of \(volume)ml")
case .coffee(let sugar, let milk):
let sugarDescription = sugar ? "with sugar" : "no sugar"
let milkDescription = milk ? "with milk" : "no milk"
print("Coffee \(sugarDescription) and \(milkDescription)")
}
}
describe(beverage: myDrink)
확실히 좀 더 디테일한 정보가 필요하다면 연관값을 사용하는게 도움이 될 거 같네요!
열거형의 가장 기본적인 정보만 추려서 정리해봤어요
재귀 열거형, 계산 속성 등 남은 정보는 조금 더 공부해서 적어볼게요 (;^ω^)
아참 그리고 신기한 사실을 하나 알았습니다
옵셔널도 열거형이라네요!!
요 부분도 조금 더 알아보고 공유해보고 싶습니다
~ヾ(^∇^)
https://www.aidanf.net/learn-swift/types_and_type_inference
https://bbiguduk.gitbook.io/swift/language-guide-1/enumerations
'iOS > Swift' 카테고리의 다른 글
[Swift] Unit Test (2) 유닛 테스트 시작하기 (0) | 2024.03.07 |
---|---|
[Swift]Unit Test (1) 코드 테스트의 원칙 (0) | 2024.03.06 |
[Swift] iOS 알림 설정 허용받기 - User Notifications (0) | 2024.03.02 |
[Swift] CollectionView 동적으로 Cell 크기 계산하기 (2) | 2024.03.01 |
[Swift] 프레임워크와 라이브러리 (3) 접근제한자 (0) | 2024.02.29 |