Enum은 열거형 이라는 의미이며 일반적으로 관련된 상수를 묶어주는 역할을 한다.
Java의 열거형은 위 특징에 추가되는 ‘타입 체크’기능이있으므로
크게 아래 두가지의 역할을 한다고 할 수 있다.
이외에도 정의된 순서를 구하거나 이름을 구하는등 기능이 있지만 위 두가지 기능만 보겠다.
enum은 아래와 같이 선언하고 사용하며, 값이 같더라도 타입이 다르면 다른 상수로 인식한다.
enum Color1 { RED, ...}
enum Color2 { RED, ...}
System.out.println(Color1.RED == Color2.RED);// => false
각 enum이 값을 가지게 할 수 있는데 이때는 생성자가 필요하다.
이때 생성자는 자동적으로 private만 가능하게 되어 외부에서 사용할 수 없다.
생성자 뿐만아니라 다른 메소드, 변수등도 내부적으로 선언할 수 있어 각 enum이 지니게 할 수 있다.
enum Color{
RED("red"), GREEN("green"), BLUE("blue");
String name;
Color(String name){
this.name = name;
}
String getName(){return name;}
}
앞의 내용을 보면 enum의 정체가 무엇이길래 생성자등을 가질 수 있는지 의문이 생길 것 이다.
enum에 대한 사실을 나열해보면
위의 특징들을 통해 java enum은 임의로 값을 지정할 수 있으며 타입체크가 가능한 것 이다. 따라서 Enum은 아래의 클래스와 같은 동작을 하는것이다.
class Color{
static final Color RED = new Color("red");
static final Color GREEN = new Color("green");
static final Color BLUE = new Color("blue");
String name;
private Color(String name){
this.name = name;
}
}
물론 실제 Enum의 기능을 훨씬 축소시키고 상속도 구현하지 않았지만 Enum이 어떤 방식으로 가능한 것인지 구현해보았다.
Written on October 3rd , 2021 by Wonbin Kim