[JAVA] Enum 클래스란?

Beom J·2021년 10월 5일
0

Java

목록 보기
7/8

Enum 클래스란?

  • java 1.5 버전부터 추가된 열거형 상수
  • 열거형 : 서로 연관된 상수들의 집합
  • ex) 월,화,수,목,금,토,일 같은 요일

어떨 때 쓰지?

기존에는 상수를 정의할 때 final String mon = "월요일" 같은 형식으로 정했다면,
enum day {"월요일","화요일"...} 처럼 하나의 집합 형식으로 선언이 가능하다.
이렇게 쓰면 변수를 쭉 선언한 상태보다 가독성과 연관성을 한눈에 알아보기 쉬워지고, '타입에 의한 열거형' 이기 때문에 상수의 값이 같더라도 타입까지 체크해주기 때문에 좀 더 안전하게 변수 사용이 가능해진다.

// 클래스 상수로만 선언했을 때
class Card {
	static final int CLOVER = 0;
    	static final int HEART = 1;
    	static final int DIAMOND = 2;
    	static final int SPADE = 3;
    
    	static final int TWO = 0;
    	static final int THREE = 1;
    	static final int FOUR = 2;
}

// enum 을 활용했을 때
class Card{
	enum Kind {CLOVER, HEART, DIAMOND, SPADE}
    	enum Value {TWO, THREE, FOUR}
}

위와 같은 상황일 때,

if(Card.CLOVER == Card.TWO) // true 가 뜨지만 개발자의 의도와는 다름
if(Card.Kind.CLOVER == Card.Value.TWO) // 컴파일 에러. 타입 불일치

이런 식으로 타입의 안전함을 얻을 수 있어서 개발자의 의도에 좀 더 가까운 코드가 가능해진다.

열거형에 멤버 추가하기

Enum 클래스에 정의된 ordinal()은 열거형 상수가 정의된 순서를 반환한다. (마치 index 처럼)
정의된 순서가 아니라 각 상수에 값을 지정해 주고 싶으면 아래처럼 구현하면 된다.


enum Direction {
	
    //상수(값)으로 적고 끝에 ; 붙여주기
    EAST(1), SOUTH(5), WEST(-1), NORTH(10);

    private final int value; //정수를 저장할 인스턴스 변수 추가
    
    // 생성자 추가. 
    // 제어자는 기본적으로 private
    // 외부에서 Direction d = new Direction(1) 같은 방식으로 호출 불가
    Direction(int value) {
        this.value = value;
    }
    public int getValue(){
        return value;
    }
}
profile
네..? 개발자요...? 아....직 일걸요...?

0개의 댓글