멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.
From. wikipedia
우리가 평소 사용하는 String, Int, Bool 은 대부분 언어에서 미리 정의를 내려 간편하게 사용할 수 있도록 만든 자료형이다.
즉 Enum 은 우리가 커스텀 자료형을 정의할 수 있도록 도와주는 예약어라고 할 수 있다.
대부분 상태(Status : approved, rejected, pending...)를 나타내거나 특정 상수를 반복하여 사용해야 할때 사용된다.
특정 상수를 String 타입으로 코드 전역에 사용하게 되면 실수가 나올 수도 있고 유지보수에 있어 매우 떨어진다.
이때 이를 방지하도록 사용할 수 있는게 enum을 이용한 자료형 정의이다.
아래 코드는 enum 사용 유무에 따라 상태에 따라 print를 찍어 주는 코드이다.
enum Status {
approved,
rejected,
pending
}
void main(){
var currentState = "approved";
switch(currentState) {
case "approved":
print('승인되었습니다.');
break;
case "rejected":
print('반려되었습니다..');
break;
case "pending":
print('대기중입니다..');
break;
}
==============enum=====================
var currentState = Status.approved;
switch(currentState) {
case Status.approved:
print('승인되었습니다.');
break;
case Status.rejected:
print('반려되었습니다..');
break;
case Status.pending:
print('대기중입니다..');
break;
}
}
정의한 enum에 확장 method를 적용하여 enum을 더욱 효율적으로 사용할 수 있게 만드는 것이다.
아래 코드는 앞서 설명한 enum 에 대한 코드에서 extension을 추가한 코드이다.
extension을 통해 changeStatusKorean 이라는 확장 함수를 등록했다.
이때의 장점은
enum Status {
approved,
rejected,
pending
}
extension stateExtension on Status {
String get changeStatusKorean{
switch(this) {
case Status.approved:
return '승인되었습니다.';
case Status.rejected:
return '반려되었습니다';
case Status.pending:
return '대기중입니다.';
}
}
}
void main(){
var currentState = Status.approved;
print(currentState.changeStatusKorean);
}