2.3.2 열거형 사용하기(Using enums)
2.3.2 열거형 사용하기(Using enums)
열거형은 유한한 값의 집합만 허용해야 할 때 좋은 선택이에요. 개별 생성자(constructors)는 허용된 변형을 나타내며, 컴파일러가 가능한 모든 값을 존중하는지 확인할 수 있게 해줍니다:
enum Color {
Red;
Green;
Blue;
Rgb(r:Int, g:Int, b:Int);
}
class Main {
static function main() {
var color = getColor();
switch (color) {
case Red:
trace("Color was red");
case Green:
trace("Color was green");
case Blue:
trace("Color was blue");
case Rgb(r, g, b):
trace("Color had a red value of " + r);
}
}
static function getColor():Color {
return Rgb(255, 0, 255);
}
}
getColor()의 반환값을 color에 할당해 값을 얻은 뒤, switch 표현식으로 값에 따라 분기합니다. 앞의 세 case(Red, Green, Blue)는 간단하며 Color의 인자 없는 생성자에 대응해요. 마지막 case인 Rgb(r, g, b)는 생성자의 인자 값을 추출하는 방법을 보여줍니다. 이 값들은 var 표현식을 쓴 것처럼 case 본문 표현식 안에서 로컬 변수로 사용할 수 있어요.
switch 표현식의 고급 정보는 패턴 매칭(pattern matching) 절에서 더 자세히 다룰게요.
출처: Using enums
본문
switch와 열거형의 조합
열거형은 switch 표현식과 함께 쓸 때 가장 강력해져요. 각 case는 열거 생성자를 패턴으로 사용하고, 인자를 가진 생성자는 Rgb(r, g, b)처럼 변수를 바인딩해서 값을 추출할 수 있습니다.
열거형의 장점
열거형을 쓰면 허용되는 값의 집합이 유한하게 제한되므로, 컴파일러가 모든 가능한 값을 처리하는지(다루지 못한 case가 없는지) 확인할 수 있어요. 이는 switch의 철저성(exhaustiveness) 검사와 결합되어 런타임 오류를 줄여줍니다.