Java Mid 08 - Enum Type
in Programming Language on Java
문자열과 타입 안정성
자바가 제공하는 열거형(Enum Type)을 제대로 이해하려면 먼저 열거형이 생겨난 이유를 알아야 한다. 열거형이 만들어진 근본적인 이유는 뭘까? 결론부터 말하자면 타입 안전성을 고려하여 잘못된 값이 할당되거나 사용되는 것을 사전에 미리 방지한다. 외부에서도 이 인스턴스들만 사용할 수 있게끔 미리 정의된 값들만을 통해 사용을 보장한다.
타입 안전 열거형 패턴
타입 안전 열거형 패턴 영어인 enum은 enumeration의 준말인데 번역하면 열거라는 뜻이고 어떤 항목을 나열하는 것을 뜻한다. 자바는 타입 안전 열거형 패턴을 매우 편리하게 사용할 수 있도록 열거형을 제공한다. (Type 안정성을 고려) 프로그래밍에서는 상수들을 사용하여 코드내에서 미리 정의된 값들의 집합을 나타낸다. 예를 들면 회원의 등급은 상수로 정의한 BASIC, GOLD, DIAMOND만 사용할 수 있다는 얘기이다.
public class ClassGrade {
public static final ClassGrade BASIC = new ClassGrade();
public static final ClassGrade GOLD = new ClassGrade();
public static final ClassGrade DIAMOND = new ClassGrade();
}
- 먼저 회원 등급을 다루는 클래스를 만들고, 각각의 회원 등급별로 상수를 선언한다.
- 각각의 상수마다 별도의 인스턴스를 생성하고, 생성한 인스턴스를 대입한다.
- 상수를 선언하기 위해 static, final을 선언한다.
- static을 사용해서 상수를 메서드에 선언한다.
- final을 사용해서 인스턴스(참조값)을 변경할 수 없게끔 설계한다.
public class ClassRefMain {
public static void main(String[] args) {
System.out.println("class BASIC = " + ClassGrade.BASIC.getClass()); //상수에 접근
System.out.println("class BASIC = " + ClassGrade.GOLD.getClass());
System.out.println("class BASIC = " + ClassGrade.DIAMOND.getClass());
System.out.println("ref BASIC = " + ClassGrade.BASIC); //참조값 확인
System.out.println("ref GOLD = " + ClassGrade.GOLD);
System.out.println("ref DIAMOND = " + ClassGrade.DIAMOND);
}
}
- 각각의 상수는 모두 ClassGrade 타입을 기반으로 만들었기 때문에 getClass()의 결과(클래스 조회)는 모두 ClassGrade이다.
- 각각의 상수는 모두 서로 각각 다른 ClassGrade 인스턴스를 참조하기 때문에 서로 다른 참조값을 가진다.
컴파일 오류 확인
생성자를 통해 객체를 생성해 ClassGrade로 넘겨야 겠다고 생각했지만, private로 생성자를 지정해두었기 때문에 개발자는 열거형에 나열되어 있는 정보만을 사용할 수 있다는 것을 확인할 수 있다.
Reference
인프런 김영한님의 자바 강좌