Enum(열거 타입)이란?

몇 가지 상수의 집합을 정의하는 클래스 타입입니다. 미리 정의해둔 값을 사용합니다. 이로 인해서 얻을 수 있는 장점들을 알아보겠습니다.

 

1. 문자열을 비교하여 자동완성, 오타 검증등을 할 수 있음

2. 미리 정의 해둔 값들로 허용되는 값들을 제한할 수 있음

3. 추가적인 상수 생성 시 Enum만 변경해도 되므로 리팩터링에 유리함


Enum 기본 사용법

Enum 선언

enum Animal{
    DOG, CAT, HORSE
}
Animal a = Animal.DOG;
System.out.println(a); // DOG 출력
  • Enum의 toString은 이름을 출력해줍니다.  

Enum 인자  

enum Animal{
    DOG("happy",10), 
    CAT("marry",5), 
    HORSE("godd",13);

    private final String name;
    private final int age;

    private Animal(String name, int age){
        this.name=name;
        this.age=age;
    }
}

 

  • 상수에 해당하는 인자를 선언할 수 있습니다.
  • 인자가 선언한 순서대로 값이 매칭됩니다.
  • 생성자는 private로 선언해야 합니다.

Enum 내부 메서드 만들기

enum Animal {
    DOG("happy", 10),
    CAT("marry", 5),
    HORSE("godd", 13);

    private final String name;
    private final int age;

    private Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
  • Enum 안에 get() 함수를 생성했을 때 상수에 포함되는 인자를 가져올 수 있습니다.
Animal a = Animal.DOG;
System.out.println(a.getAge()); // 10 출력

Enum 활용하기

Enum에 대한 기본 사용법을 알아봤습니다. 활용해보겠습니다.

Enum 메서드에 String이 들어오면 그에 맞는 상수를 반환해주는 메서드를 만들어보겠습니다.

  • 동물들의 과가 있고 그에 속하는 동물 종이 있습니다.
enum Animal {    
    DOG(Arrays.asList("Shiba dog", "Golden Retriever","Welsh Corgi")),
    CAT(Arrays.asList("Bangol", "Sphinx","Munchkin")),
    ETC(Arrays.asList("hi","bye"));
    private final List<String> species;

    Animal(List<String> species) {
        this.species = species;
    }
}
  • 이때 동물종이 들어오면 어떤가에 속하는지 알려주는 메서드입니다.
public static Animal findSpecies(String name){  // 동물의 종이 들어옴
    return Arrays.stream(Animal.values()) // 과의 모든 벨류를 Stream으로 넘김
            .filter(animal -> animal.getIncludedSpecies(name)) // 
            .findAny() // 만약 찾는다면 그것을 반환
            .orElseGet(() -> ETC); // 없다면 ETC를 반환
}

public boolean getIncludedSpecies(String specie){
    return species.stream() // 종을 비교하고, 존재한다면 true를 반환합니다.
            .anyMatch(a -> a.equals(specie));
}
  • Bangol을 어떤 과에 속하는지 찾았을 때 CAT으로 정상 출력됩니다.
Animal findResult = Animal.findSpecies("Bangol");
System.out.println(findResult); // CAT 출력

Enum이 무엇인지, 기본 사용법, 활용법을 알아봤습니다. 감사합니다. 

 

'JAVA' 카테고리의 다른 글

이펙티브 자바  (0) 2022.04.22
JAVA Overloading & Overriding  (0) 2022.02.26
JAVA Stream  (0) 2022.02.23
JAVA Optional<T>  (0) 2022.02.23
JAVA 람다(lambda)  (0) 2022.02.21