안녕하십니까 공부하는 개발자 입니다.
공부하면 공부할수록 너무 어렵네요 ㅎㅎ
특히 코딩테스트는 벽을 느끼고 있지만 swift로 다시 도전하면서 레벨업을 해보도록 하겠습니다.
오늘의 포스팅은 Enumerations(열거형)입니다.
java를 배우던 입장에서는 생소한 느낌의 개념이여서 정리해 보려 합니다.
⚙️ 열거형이란?
열거형이란 하나의 공통된 주제로 이미 정해놓은 입력값를 선택해서 받을때 사용 하는 것이 열거형 입니다.
enumeration에서 이미 정해놓은 값 하나하나의 요소를 enumeration case라고 지칭 합니다.
독립적인 자료형이며 코드의 안정성과 가독성이 올라가는 장점이 있어 사용을 하고 있습니다.
⚙️열거형 선언
1
2
3
4
|
enum TypeName{
case caseName
case caseName, caseName
}
|
cs |
열거형의 선언은 위와 같습니다. enum, TypeName을 선언하고 그 안에 case로 caseName을 선언해주면 됩니다.
1
2
3
4
5
|
enum Alignment{
case left
case right
case center
}
|
cs |
이런식으로 선언해 주시면 됩니다.
여기에서 case에 접근할 때는
Alignment.center
이런식으로 선언을 해주면 center라는 값으로 호출됩니다.
물론 이 값을 변수에 담을 수도 있습니다.
1
2
3
|
var textAlignment = Alignment.center
//변수에 값을 변화시킬 때는 앞에 열거형을 알고 있기 때문에 생략이 가능하다
textAlignment = .left
|
cs |
⚙️열거형 비교
열거형의 경우에는 값이기 때문에 비교문으로 비교가 가능합니다.
1
2
3
|
if textAlignment == .center{
}
|
cs |
이런식으로 조건문으로 사용이 가능하기 때문에 swith문으로도 사용이 가능합니다.
1
2
3
4
5
6
7
8
|
switch textAlignment{
case .left:
print("left")
case .right:
print("right")
case .center:
print("center")
}
|
cs |
⚙️ 열거형의 원시값 (Raw Values)
열거형은 기본적으로 아무런 값을 주지 않을 수 있지만 반대로 원시값을 저장해 줄 수 있다.
1
2
3
|
enum TypeName : RawValueType{
case caseName = value
}
|
cs |
기본적인 선언은 위와 같이 선언을 진행하는데 여기서 RawValueType의 경우에는
String, Character, Number 3가지중에 하나여야합니다.
또한 case와 함깨 다른 값을 저장할 때 선택적으로 사용합니다.
그리고 값을 저장하지 않으면 이전값을 기준으로 값을 타입에 맞게 저장한다.
1
2
3
4
5
6
|
enum Alignment: Int{
case left
case right = 100
case cneter
}
|
cs |
RawValueType의 경우에 Number로 선언하고 right의 값만 value를 선언하였습니다.
1
2
3
|
Alignment.left.rawValue //0
Alignment.right.rawValue //100
Alignment.cneter.rawValue //101
|
cs |
.으로 rawValue를 선언하게되면 value로 저장했던 값을 호출 할 수 있습니다.
여기서 중요한 것은 처음 값의 경우에는 아무것 저장하지 않았기 때문에 0
하지만 right의 경우에는 값을 선언하여 100이 나왔습니다.
그 다음 center에값이 101이 되어버린것은 앞에있던 right.rawValue의 값에 영향을 받은 것 입니다.
그렇다면 String타입과 char타입은 어떤식일까요?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
enum Weekday: String{
case sunday
case monday = "Monday"
case tuesday
case wednesday
case thursday
case friday
case saturday
}
//String타입의 경우에는 기준값이 case이기 때문에 case와 동일한 값을 String타입으로 리턴한다.
Weekday.sunday.rawValue
Weekday.monday.rawValue
enum ControlChar : Character {
case Tab = "\t"
case newLine = "\n"
}
//원시값의 타입이 Character라면 case도 character여야하지만 원시값을 character로 선언한다면 오류가 나지 않는다.
|
cs |