1. 정의
final과 같이 자바에서 상수값을 만드는 방법 중 하나이다.
enum은 관련 있는 상수들의 집합이며, 해당 클래스가 상수만으로 작성되어 있을 경우 반드시 class로 선언할 필요 없이 enum으로 선언하면 된다.
일반적인 데이터 타입의 경우 변수를 만든 뒤 형에 맞는 아무 값이나 넣을 수 있으나, 열거형 타입으로 변수를 선언하는 것은 일반 데이터 타입과는 동일하지만 열거형을 선언할 때 명시한 값을 넣을 수 있다.
열거형을 사용하는 가장 큰 이유는 숫자 상수를 사용하는 것보다 열거형 상수를 사용하는 것이 훨씬 직관적이기 때문이다.
열거형은 상수를 묶어서 관리할 수 있다는 큰 장점도 가지고 있고 상수는 상수 자체가 형이 아니기 때문에 형 안정성을 보장할 수 없었으나 자바 5.0 이후로는 열거형을 통해 상수의 형 안정성을 보장하고 있다.
2. 특징
순번 |
특징 |
1 |
코드가 단순하고, 가독성이 높음 |
2 |
인스턴스를 생성할 수 있고 상속을 방지할 수 있음 |
3 |
enum이라는 키워드를 사용하기 때문에 의도가 분명하게 나타남 |
3. 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | import java.util.HashMap; import java.util.Map; public enum Sample { PASSED(1, "Passed", "The test has passed."), FAILED(-1, "Failed", "The test was executed but failed."), DID_NOT_RUN(0, "Did not run", "The test did not start."); // 변수, Map 생성 int code; String label; String description; static Map<Integer, Sample> map; // 생성자 메소드로 변수들 초기화 private Sample (int code, String label, String description) { this.code = code; this.label = label; this.description = description; System.out.println("console> code : " + code); System.out.println("console> label : " + label); System.out.println("console> description : " + description); } // 정수를 넣으면 해당하는 상수 값을 Sample 클래스에 담아 리턴하는 메소드 public static Sample getStatus(int i) { // main 메소드에서 getStatus() 호출하는 경우 Map에 들어있는게 없기 때문에 // initMapping() 메소드를 무조건 호출하게 됨 if (map == null) { initMapping(); } System.out.println("console> getStatus get(i)) : " + map.get(i)); return map.get(i); } private static void initMapping() { map = new HashMap<Integer, Sample>(); // Sample 클래스에 선언되어 있는 상수들을 모두 돌림 for (Sample sample : values()) { map.put(sample.code, sample); System.out.println("console> map.get = " + sample); } } public int getCode() { return code; } public String getLabel() { return label; } public String getDescription() { return description; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Status"); sb.append("{code = ").append(code); sb.append(", label = '").append(label).append('\''); sb.append(", description = '").append(description).append('\''); sb.append('}'); return sb.toString(); } public static void main(String[] args) { System.out.println(Sample.PASSED); System.out.println(Sample.getStatus(-1)); } } | cs |
'BackEnd > Java' 카테고리의 다른 글
Java :: Spring 파일 업로드 (multipart-form/data) (2) | 2017.03.14 |
---|---|
가변인수 (Java 5.0 이상) (0) | 2017.02.13 |
초기화 블록 (Initialization block) (0) | 2017.02.13 |
AWT vs 스윙 (Swing) (0) | 2017.02.10 |
람다식과 함수형 프로그래밍 (Java 8.0 이상) (0) | 2017.02.09 |