본문 바로가기
프로그래밍/Java

[java] java Enum의 개념과 기본 메서드

by 사바라다 2020. 3. 11.

안녕하세요. 오늘은 java의 enum에 대해서 알아보도록 하겠습니다. java에서 정보를 나열할 때 enum class를 많이 사용합니다. enum은 java7에서 부터 등장하기 시작했는데요.

그거 아셨나요 ? enum은 Object Class를 상속 받은 class입니다. 우리가 기본적으로 사용하는 enum 이라고 선언하는 것은 사실 enum class를 상속받아 사용하는 것입니다.

Enum 기본

enum을 기본적으로 선언하면 아래와 같습니다.

public enum CompanyType {
    KAKAO, Naver, Coupang
}

그리고 사용한다면 아래와 같이 사용할 수 있습니다. 아래 enum Type에는 KAKAO, Naver, Coupuang을 set하고 사용할 수 있습니다.

public class Account {
    private String id;
    private String pw;
    private CompanyType type;

    public Account(String id, String pw, CompanyType type) {
        this.id = id;
        this.pw = pw;
        this.type = type;
    }
}

public static void main(String[] args) {
    Account account = new Account("id", "pw", CompanyType.KAKAO);
}

enum은 위에서 설명하길 class를 상속 받은 것이라고 했습니다. 그렇기 때문에 enum에 parameter를 넣어 사용할 수 도 있으니 다양한 표현 방법을 함께 사용할 수 있다는 것도 장점입니다.

Enum Default method

그렇다면 Enum class의 기본 메서드에 대해서 알아보도록 하겠습니다. enum class는 Object class를 상속하고 있으며 enum 자신만의 기본 method를 가지고 있습니다.

  • values : 열거된 모든 원소를 배열에 담에 순서대로 반환
public enum CompanyType {
    KAKAO, Naver, Coupang

    public static void printAll() {
        for(CompanyType type : values()) {
            System.out.println(type);
        }
    }
}

values 메서드는 위와 같이 사용할 수 있습니다. CompanyType#printAll 메서드를 위와 같이 정의하고 타 메서드에서 호출하면 순환하며 아래와 같이 출력되어집니다.

KAKAO
Naver
Coupang
  • ordinal : 원소에 열거된 순서를 정수 값으로 반환
public enum CompanyType {
    KAKAO, Naver, Coupang

    public static void printAll() {
        for(CompanyType type : values()) {
            System.out.println(type.ordinal());
        }
    }
}

ordinal 메서드는 c/c++ 등의 enum과 같이 순서대로 int형으로 반환합니다. 그래서 KAKAO, Naver, Coupang 순서대로 1, 2, 3이 매핑됩니다. 위의 printAll은 아래와 같이 출력됩니다.

1
2
3
  • valueOf : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소를 반환 (주어진 String과 일치하는 원소가 없는 경우 IllegalArgumentException 예외 발생)
public enum CompanyType {
    KAKAO, Naver, Coupang

    public static CompanyType convertToType(String str) {
        return valueOf(str);
    }
}

public static void main(String[] args) {
    CompanyType type = CompanyType.convertToType("KAKAO");
    System.out.println(type);
    System.out.println(type.ordinal());
}

valueOf 메서드는 String을 enum에 맞는 Type으로 변경시켜주는 메서드입니다. 위와같이 사용할 수 있고 main에서 println에 대해서 아래와 같이 결과가 나옵니다.

KAKAO
1

마무리

이렇게 해서 Java enum과 그 기본 메서드에 대해서 알아보았습니다. enum은 java를 사용하며 상당히 많이 사용하는 class 입니다. 유용한 메서드를 활용해 더욱 가독성 있는 코드를 작성하길 바랍니다.

감사합니다.

참조

java 1.7 thread.state docs

enum

https://www.geeksforgeeks.org/enum-in-java/

댓글