자바에는 열거형이라는 enum이라는 것이 있다. 이는 자바의 3 요소로 불리기도 한다. ( class / Interface / enum) 오늘은 이 enum을 만드는 방법을 간단히 알아보도록 하자. (기준은 eclipse로 설명하겠다.)
enum 만들기
만드는 방법은 간단하다. 기존의 class와 interface를 만들듯이 package 우클릭 - > new -> enum을 클릭해 생성하면 된다.
그러면 이제 아래와 같은 창이 뜨게되는데, 웬만해서는 그냥 default로 두고 Name만 설정해 준 뒤, Finish 버튼을 눌러 주면 된다.
enum 선언하기
사실 모양은 class와 interface와는 다른 점이 없다. 다만 enum의 주요목적은 상직적인 의미를 가지는 상수를 선언해서 사용하기 위해 만들어졌다는 점이다. 그러면 기존의 interface나 class로 final 키워드를 붙여서 사용하면 되는 거 아니냐 라고 생각할 수 있다. 그렇지는 않다. enum에 상수들은 큰 특징이 있는 바로 타입 없이 사용된다는 점이다. (사실 타입이 없다기 보다는 enum 자체가 타입이라고 볼 수도 있다.)
예제의 enum Name을 살펴보자 기존에 class나 inteface에서 이름이라는 변수를 선언하려면 String = "king" 이런식으로 타입을 선언해주어야 했다. 하지만 enum에서는 그럴 필요 없이 단순 king이라고 코드를 작성해주면 된다. ( 단 enum의 상수들은 모두 대문자로 적는 것이 관례이다. )
위처럼 컴파일상의 오류 없이 정상적으로 실행되는 것을 확인할 수 있다. 이제 상수도 하나 만들어 주었으니, 실행 클래스로 이동해 사용을 해보도록 하자.
실행클래스
package tEnum;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String name = scan.next();
// 임의이 이름을 입력받는다.
// enum의 KING라는 이름과 같은지 비교를 해보자.
Name realName = Name.KING;
// enum 변수에 KING을 담아준다.
if(name.equals(realName.name())) {
// 타입이 enum이기 때문에
// name 메소드로 String형태로 리턴되게 해준다.
System.out.println("당신이 KING 이군요!!");
}else {
System.out.println("당신은 KING이 아니야!!!!!");
}
}
}
사용 코드는 간단하게 Scanner로 문자열을 입력받아 name 변수에 저장한 후 enum 선언한 KING과 같은지 비교하는 코드이다. 여기서 String 변수 name과 비교하기 위해 enum 객체 realName을 선언해주었으며, 그 후 enum 메서드 name ( )을 통해서 String 타입으로 리턴해 입력받은 name과 같은지 비교한다.
입력값이 KING과 같을 경우 아래와 같은 결과가 나타나며,
입력값이 KING과 다를 경우 아래와 같은 결과가 나타난다.
enum은 class 와 성격이 비슷해 생성자와 메소드도 선언할 수 있는데, 이는 다음에 알아보도록 하자.