2021-02-07
자바에는 열거형이라는 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 와 성격이 비슷해 생성자와 메소드도 선언할 수 있는데, 이는 다음에 알아보도록 하자.