JAVA Enum
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 |
댓글
이 글 공유하기
다른 글
-
이펙티브 자바
이펙티브 자바
2022.04.22 -
JAVA Overloading & Overriding
JAVA Overloading & Overriding
2022.02.26 -
JAVA Stream
JAVA Stream
2022.02.23 -
JAVA Optional<T>
JAVA Optional<T>
2022.02.23