#2 Enum(열거형)

charco·2021년 5월 19일
0

나도TIL

목록 보기
3/55

Enum이란?

서로 관련된 상수를 편리하게 선언하기 위한 것이다.
여러 상수를 정의할때 사용하면 유용하다.
만약 동서남북의 방향을 상수로 정의하고 싶다고 해보자.

enum Direction{
    EAST, WEST, SOUTH, NORTH
}

위에 작성된 Enum의 상수를 사용하고 싶다면
Enum 이름에 .을 붙히고 상수의 이름을 쓰면 된다.

       	System.out.println(Direction.EAST); //EAST
        System.out.println(Direction.SOUTH); //SOUTH

마치 static 멤버를 불러오는 것과 비슷한 모습이다.

열거형에 멤버 추가하기

만약 각 방향에 대해 요소(멤버)들을 추가하고 싶다면
아래와 같이 작성한다.
멤버에 대한 인스턴스 변수와 생성자를 추가해야 된다는 것을 주의하자.

enum Direction{
    EAST("→"), WEST("←"), SOUTH("↓"), NORTH("↑");
    //관련된 상수에 대한 변수를 선언해야 한다.
    private final String symbol;
    
    //변수를 받는 생성자가 있어야 한다.
    //생성자는 묵시적으로 private이다.
    Direction(String symbol){
        this.symbol = symbol;
    }
    
    //화살표를 외부에서 가져오기 위한 setter
    public String getSymbol() {
        return symbol;
    }
}

왜 이렇게 해야 하는지는 좀 더 아래에서 설명할 것이다.

화살표(멤버)를 출력하려면 아래와 같이 코드를 작성한다.

        System.out.println("EAST: " + Direction.EAST.getSymbol()); //EAST: →
        System.out.println("WEST: " + Direction.WEST.getSymbol()); //WEST: ←

열거형의 이해와 원리

사실 위의 EAST, WEST, SOUTH, NORTH 는
사실 Direction 인스턴스다.

	//인스턴스의 클래스의 이름을 출력하는 코드
	System.out.println(Direction.SOUTH.getClass().getName());
        System.out.println(Direction.NORTH.getClass().getName());
        //둘 모두 Direction 이 출력된다.

그래서 Direction.EAST.getSymbol() 과 같이 메서드를 호출 할 수 있었던 것이다.
열거형 Direction을 클래스로 다시 구현한다면 아래와 같아진다.
아래의 코드를 보면 왜 인스턴스 변수와 생성자를 만들어야 하는지
알 수 있을 것이다.

class Direction{

    static Direction EAST = new Direction("→");
    static Direction WEST = new Direction("←");
    static Direction SOUTH = new Direction("↓");
    static Direction NORTH = new Direction("↑");

    private final String symbol;
    private Direction(String symbol){
        this.symbol = symbol;
    }

    public String getSymbol() {
        return symbol;
    }
}
profile
아직 배우는 중입니다

0개의 댓글