열거형 자료형이란?
- 서로 관련된 상수들의 집합을 표현하는데 사용한다
- 서로 유기적인 관계성을 가지며 자바의 클래스로 취급한다.
- 메서드는 존재하지 않는다. (단지 열거된 자료일 뿐)
- 클래스의 static final 필드처럼 쓰인다 : 각 상수는 정의된 Enum 타입으로 간주한다.
cf) static final 필드 처럼 사용되기 때문에 모든 요소를 대문자로 써주는 것이 권장된다.
1. ENUM 선언 방법 - enum 키워드 사용
enum Enum명 {}
다음과 같이 선언하며 명명규칙은 클래스와 동일하다
중괄호 내에서 열거할 데이터를 ,로 구분하여 나열한다.
enum Fruits{
Apple, Banana, Orange
}
<Main method>
Fruits apple = Fruits.Apple;
System.out.println(apple);
2. ENUM의 특별한 주요 메서드
1) values() : 열거형의 모든 값을 배열로 반환해준다.
enum Fruits{
Apple, Banana, Orange
}
System.out.println(Fruits.values());//[Lchapter16.review.Fruits;@119d7047
for(Fruits fruit : Fruits.values()){
System.out.println(fruit);
}
values의 경우에는 배열을 반환하게 되는데, 배열은 출력하면 배열의 주소값이 뜨게 된다. 따라서 요소를 출력하고 싶다면 향상된 for문을 이용하여 요소값을 출력할 수 있다.
2) names() : Enum상수의 이름을 문자열로 반환해준다.'
String appleName = Fruits.Apple.name();
System.out.println(appleName.toLowerCase());
3) valueOf(String name) : 문자열로 Enum 상수 (0부터 시작)를 반환한다.
잘못된 문자열을 보낼 경우 IllegalArgumentException 발생한다.
Fruits orange = Fruits.valueOf("Orange");
4)ordinal() : Enum 상수의 순서를 반환한다. (0부터 시작한다.)
System.out.println(orange.ordinal());
orange 의 경우에는 세번째에 있었으므로 2가 출력된다. (인덱스는 0부터 시작하기 때문에 0,1,2)
3. 클래스를 활용한 Enum
enum CoffeeSize{
SMALL(200), MEDIUM(300), LARGE(450), VENTI(760);
private final int ml;
CoffeeSize(int ml) {
this.ml = ml;
}
public int getMl(){
return ml;
}
}
**반드시 위에서 초기화를 시켜줘야 한다.
CoffeeSize size = CoffeeSize.MEDIUM;
System.out.println(size+"의 용량은"+size.getMl()+"입니다.");
CoffeeSize anotherSize = CoffeeSize.LARGE;
System.out.println(anotherSize+"의 용량은"+anotherSize.getMl()+"입니다.");
<실행결과>
MEDIUM의 용량은300입니다.
LARGE의 용량은450입니다.
4. Enum Method Overriding
예시 1)
Enum은 상수별 다른 동작 정의가 가능하다
abstract method를 선언하고 상수별로 구현이 가능하다.
enum Operation{
ADD{
public int apply( int x, int y ){
return x+y;
}
},
SUBSTRACT{
public int apply( int x, int y ){
return x-y;
}
},
MULTIPLY{
public int apply( int x, int y ){
return x*y;
}
};
public abstract int apply(int x, int y);
}
위와 같이 ADD( 덧셈), SUBSTRACT(뺄샘), MULTIPLY(곱셈)을 정의해준다면 상수별로 구현이 가능하다. 메인메서드에서는 다음과 같이 활용할 수 있다.
public class C_EnumOverriding {
public static void main(String[] args) {
System.out.println(Operation.ADD.apply(5,3));
System.out.println(Operation.SUBSTRACT.apply(5,3));
System.out.println(Operation.MULTIPLY.apply(5,3));
}
}
예시 2)
enum Season{
SPRING("봄"), SUMMER("여름"),AUTUMN("가을"),WINTER("겨울");
private final String seasonName;
Season(String seasonName) {
this.seasonName = seasonName;
}
public String getSeasonName() {
return seasonName;
}
}
<Main method>
Season season = Season.WINTER;
switch (season){
case SPRING:
System.out.println("vom vom vom");
break;
case SUMMER:
System.out.println("한여름밤의 꿀");
break;
case AUTUMN:
System.out.println("나 가을 타나봐");
break;
case WINTER:
System.out.println("징글벨 징글벨");
break;
}
<실행 결과>
징글벨 징글벨
'JAVA' 카테고리의 다른 글
DTO, VO, DAO, Entity (1) | 2025.03.24 |
---|---|
Wrapper Class (1) | 2025.03.22 |
Stream API (1) | 2025.03.21 |
메서드 참조 (Lambda) (0) | 2025.03.20 |
람다식(Lambda) - 함수형 인터페이스 4가지(Predicate, Function, Consumer, Supplier) (1) | 2025.03.19 |