enum 이란?
: enum의 정의는.. Enumerated Type (열거형 타입)을 줄인 용어이며, 상수 값을 대표하는 이름의 멤버들로 집합을 이루는 열거 자료형 타입이다.
- 자바 1.5버전부터 새롭게 추가된 개념으로, 열거형 상수라고 불린다.
- 자바에서는 상수값을 정의할 때 final static String ~ 와 같은 방식으로 정의했는데, enum을 사용해서 대체가 가능하다.
- Class 처럼 정의하는 상수, 서로 관련 있는 상수들끼리 묶을 수 있다.
그럼 enum은 언제 사용할까?
상수값 중에서 비슷한 종류(서로 관련 있는)의 상수를 묶어놓기 위해 사용
// 로또 프로그램에서 1등부터 5등까지를 의미하는 등수와 각 등수가 만들어 지는 조건, 그리고 각 등수에 해당하는 상금을 묶어낼 필요가 있을 경우를 정의하였다.
// 각각 [번호 일치 개수, 보너스 번호 적용여부, 당첨금액]
enum LottoRank {
FIRST(6, false, 2000000000),
SECOND(5, true, 50000000),
THIRD(5, false, 1000000),
FOURTH(4, false, 50000),
FIFTH(3, false, 5000),
NONE(0, false, 0);
}
// 이렇게 비슷한 종류의 상수끼리 묶었다.
enum 정의
선언 케이스는 3가지로 나눌 수 있다.
1] enum java파일 별도로 생성
2] Class 안에서 enum을 선언
3] Class 밖에서 enum을 선언
enum 구현 예제
public enum UseYn {
Y("사용", "Yes", 1),
N("미사용", "No", 0);
private final String koreanName;
private final String englishName;
private final int intType;
UseYn(String koreaName, String englishName, int intType) {
this.koreanName = koreaName;
this.englishName = englishName;
this.intType = intType;
}
public String getKoreanName() {
return koreanName;
}
public String getEnglishName() {
return englishName;
}
public int getIntType() {
return intType;
}
}
public static void main(String[] args) {
UseYn useYes = UseYn.Y;
UseYn useNo = UseYn.N;
System.out.println("한국어: "+useYes.getKoreanName()+", 영어: "+useYes.getEnglishName()+", 숫자로: "+useYes.getIntType());
System.out.println("한국어: "+useNo.getKoreanName()+", 영어: "+useNo.getEnglishName()+", 숫자로: "+useNo.getIntType());
}
// 출력결과
// 한국어: 사용, 영어: Yes, 숫자로: 1
// 한국어: 미사용, 영어: No, 숫자로: 0
enum 객체의 메소드
public enum NumTest { // enum 예제
ONE, TWO, THREE, FOUR
}
- name(): 열거 객체의 문자열을 리턴
- 리턴타입: String
NumTest test = NumTest.ONE;
String name = test.name(); // ONE 출력
- ordinal(): 열거 객체의 순번(0부터 시작)을 리턴
- 리턴타입: int
NumTest test1 = NumTest.ONE;
NumTest test2 = NumTest.TWO;
int ordinal1 = test1.ordinal(); // 0 출력
int ordinal2 = test2.ordinal(); // 1 출력
- compareTo(): 열거 객체를 비교해서 순번 차이를 리턴
- 리턴타입: int
- ordinal1는 순서 0에서 2를 빼므로 -2
- ordinal2는 순서 2에서 0을 빼므로 2
NumTest test1 = NumTest.ONE;
NumTest test2 = NumTest.THREE;
int ordinal1 = test1.compareTo(test2); // -2 출력
int ordinal2 = test2.compareTo(test1); // 2 출력
- valueOf(String name): 주어진 문자열의 열거 객체를 리턴
- 리턴: 열거 타입
NumTest test = NumTest.valueOf("ONE"); // NumTest의 ONE을 참조하게 됨.
- values(): 모든 열거 객체들을 배열로 리턴
- 리턴: 열거 배열
NumTest[] testArray = NumTest.values();
for(NumTest t : data) {
System.out.println(data); // 각각 ONE, TWO, THREE, FOUR 출력
}
'JAVA' 카테고리의 다른 글
Java - 데이터 타입(기본타입, 참조타입) (0) | 2021.10.20 |
---|---|
Java - Jackson (0) | 2021.09.30 |
Java - 로컬환경 자바프로젝트 세팅 (with Docker) (0) | 2021.09.15 |
Java - 자바 객체 지향의 원리와 이해(개념정리) - 2편 (0) | 2021.02.24 |
Java - 자바 객체 지향의 원리와 이해(개념정리) - 1편 (0) | 2021.02.08 |