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.22Chapter 1 1. 정적 팩터리 메서드의 장점1 class Order{ private boolean prime; private boolean urgent; private String product; public Order(String product, boolean prime){ this.product=product; this.prime=prime; this.urgent=false; } /* 같은 파라미터 타입으로 오버로딩 사용불가 public Order(String product, boolean urgent){ this.product=product; this.urgent=urgent; this.prime=false; } */ // 정적 팩토리 메서드 사용해서 해결 // 정적 메서드 이름으로 좀더 시그… -
JAVA Overloading & Overriding
JAVA Overloading & Overriding
2022.02.26Overloading이란? 한 클래스 내에 동일한 이름의 메서드를 둘 이상 정의하는 것은 허용되지 않습니다. 하지만 매개변수가 다르다면 선언이 가능합니다. 이것을 오버 로딩이라고 합니다. Overloading조건 1. 메서드의 이름 같음 2. 메서드의 매개변수 다름 (주의 반환형이 다른 것은 오버 로딩으로 볼 수 없습니다.) Overloading 이점 1. 하나의 이름으로 메서드의 같은 기능을 정의할 수 있습니다. System.out.println 에서 볼 수 있습니다. Sytem.out.println()의 함수들을 살펴보겠습니다. public void println(boolean x) { synchronized (this) { print(x); newLine(); } } public void print… -
JAVA Stream
JAVA Stream
2022.02.23Stream이란? java에서 데이터의 흐름을 생성할 수 있습니다. 이러한 흐름을 Stream이라고 합니다. Stream을 생성하고 데이터에 연산을 진행할 수 있습니다. 1. 중간 연산 -> 마지막이 아닌 위치에서 실행되는 연산 2. 최종 연산 -> 마지막에 진행되는 연산 연산들을 이용해서 데이터를 가공하는 것이 Stream의 목표라고 할 수 있습니다. Stream 생성 Stream을 생성하는 여러 가지 방법을 살펴보겠습니다. primitive 자료형 int [] arr1 = new int[10]; IntStream stream1 = Arrays.stream(arr1); double [] arr2 = new double[10]; DoubleStream stream2 = Arrays.stream(arr2)… -
JAVA Optional<T>
JAVA Optional<T>
2022.02.23Optional 이란? Optional은 null이 올 수 있는 값을 감싸는 Wrapper 클래스입니다. 즉 개발자는 null을 검증하는 로직을 일일이 작성할 필요 없이 Optional로 감싼 후 Optional의 매소드들을 사용해 가공할 수 있습니다. 간단하게 Optional 사용하지 않은 코드와 사용한 코드를 살펴보겠습니다. Box 안에 담겨 있는 Toy를 가져오는 코드입니다. 이때 Toy가 초기화되지 않아서 NullPointerException이 발생합니다. class Box{ Toy toy; public Toy getToy(){ return toy; } } class Toy{ String name; public String getName() { return name; } } public class…
댓글을 사용할 수 없습니다.