[Java] enum 메서드 간단 정리 - Values, ValueOf, Name

그냥사람·2024년 11월 23일

1. values 메서드

E[] enum명.values()

해당 enum의 모든 상수를 담은 배열을 반환한다. 이를 통해 enum의 모든 상수에 쉽게 접근할 수 있다.
곧, enum의 모든 상수를 순회하여 처리해야 할 때 유용하게 사용된다.

enum Direction { EAST, SOUTH, WEST, NORTH }

public class EnumExample {
    public static void main(String[] args) {
        Direction[] allDirections = Direction.values(); // Direction의 모든 상수를 배열에 담아 반환
        
        for (Direction dir : allDirections) {
            System.out.print(dir + " "); // 출력결과) EAST SOUTH WEST NORTH
        }
    }
}

2. valueOf 메서드

E enum명.valueOf(String constantName)

문자열을 받아 해당하는 enum 상수를 반환한다. 이 때, 주어진 문자열에 대해 대소문자가 정확히 일치하는 enum 상수가 없는 경우 IllegalArgumentException을 발생시킨다.

enum Direction { EAST, SOUTH, WEST, NORTH }

public class EnumExample {
    public static void main(String[] args) {
        Direction east = Direction.valueOf("EAST");
        Direction northEast = Direction.valueOf("NORTHEAST"); // IllegalArgumentException 발생
    }
}

이 때, valueOf를 통해 얻은 상수와 직접 .(접근 연산자)을 찍어 얻은 상수는 같은 상수이다.
(Directions.valueOf("EAST") 는 Direction.EAST 와 동일하다.)
그렇다면 어차피 .을 찍어 접근하면 되는데 굳이 이름을 쳐서 접근하는 이유가 무엇일까?
가장 큰 이유는 코드의 유연성과 확장성 때문이다. 만약 사용자의 입력(외부 데이터)에 따라 상수가 결정된다면 접근 연산자를 통해 상수를 불러올 수는 없을 것이다. 그리고 valueOf를 사용하여 상수를 관리할 경우 나중에 enum의 값이 변경되거나 추가되었을 때 코드 수정을 최소화 할 수 있다.

3. name 메서드

String enum명.상수명.name()

valueOf 메서드가 상수 이름(문자열)을 통해 상수를 반환한다면, name 메서드는 반대로 상수를 통해 상수 이름(문자열)을 반환한다.

enum Direction { EAST, SOUTH, WEST, NORTH }

class Main {
    public static void main(String[] args) {
        System.out.println(Direction.EAST.name()); // 출력내용) EAST
    }
}
profile
Simple is Best, 간결하게 살자

0개의 댓글