코딩마을방범대

Enum 에 대하여 본문

💡 백엔드/Java

Enum 에 대하여

신짱구 5세 2023. 5. 25. 14:00
728x90

 

enum이란

 

한정된 개수의 값들을 하나로 묶어 사용 가능한 자바 파일

 


 

enum 생성

  • enum 값들 세팅 ( 값들 사이엔 콤마[,]를 이용해 연결하고, 마지막 값엔 세미콜론[;]으로 닫기 )
  • enum 값의 순서대로 전역 변수 선언

  
@Getter
@AllArgsConstructor
public enum Num {
ONE("one", 10),
TWO("two", 20);
private final String name;
private final int value;
}

 

 


 

 

enum 호출


  
Num.ONE

  

 

 


 

 

 

 

 

 

Enum의 메소드

 

values()

  • enum의 모든 값들을 배열로 만들어 리턴해줌
  • for (Num num : Num.values()) { System.out.println(Num.getName()); // one // two }

 


 

ordinal()

enum 중 몇 번째 값인지 숫자 반환


  
Num.ONE.ordinal() // 0

 


 

valueOf

문자열을 통해 enum 값을 찾아옴


  
Num.valueOf("ONE").getName() // one

 


 

valueOf().name

enum값의 이름을 찾아옴


  
Num.valueOf("ONE").name() // ONE

 


 

compareTo()

두 enum값을 비교하여 전후로 몇 번째에 위치하는지 반환


  
Num.ONE.compareTo(Num.ONE) // 0
Num.ONE.compareTo(Num.TWO) // -1

 

 

 


 

 

 

 

 

@Enumerated 어노테이션의 EnumType

 

ORDINAL

enum 순서 값을 DB에 저장


  
enum Gender {
MALE, // 1
FEMALE; // 2
}
@Enumerated(EnumType.ORDINAL)
private Gender gender;

 


 

STRING

enum 이름을 DB에 저장


  
enum Gender {
MALE, // "MALE"
FEMALE; // "FEMALE"
}
@Enumerated(EnumType.STRING)
private Gender gender;

 

 

 

 


 

 

 

 

 

 

EnumSet

 

열거형(Enum) 타입으로 지정해놓은 요소들을 배열처럼 다룰 수 있는 기능을 제공하는 Set이다.

 

원소의 개수가 64개를 넘지 않는 경우 메모리를 적게 차지하고 속도도 빠른 비트필드를 제공한다.

EnumSet은 Enum과 Static 메소드로 구성되어 있어 안전성을 추구하며 편리하게 사용 가능하다.

 

메소드 설명
allOf 열거체에 있는 모든 상수를 가져옴
copyOf EnumSet을 복사함 ( enumSet.clone() 과 동일함 )
noneOf 비어있는 EnumSet을 생성함
of 주어진 상수를 찾아 EnumSet을 구성함 ( 인수의 상수들은 동일한 Enum 이여야함 )
complementOf 주어진 EnumSet을 제외하고 새로운 EnumSet을 구성함
reange 주어진 상수 구간 내에 있는 상수들로 EnumSet을 구성함

 


 

예제


  
// [ONE, TWO, THREE, FOUR, FIVE]
EnumSet enumSet1 = EnumSet.allOf(Num.class);
// [ONE, TWO, THREE, FOUR, FIVE]
EnumSet enumSet2 = EnumSet.copyOf(enumSet1);
// []
EnumSet enumSet3 = EnumSet.noneOf(Num.class);
// [ONE, THREE]
EnumSet enumSet4 = EnumSet.of(Num.ONE, Num.THREE);
// [TWO, FOUR, FIVE]
EnumSet enumSet5 = EnumSet.complementOf(enumSet4);
// [TWO, THREE, FOUR]
EnumSet enumSet6 = EnumSet.range(Num.TWO, Num.FOUR);
// [TWO, THREE, FOUR]
EnumSet clone = enumSet6.clone();

 

 

 

 


 

 

 

 

 

 

💡 TIP!

 

1. API 테스트 시 406 Not Acceptable 오류가 발생?

  • 컨트롤러의 반환 타입의 객체에 Getter가 정상적으로 선언되었는지 확인 필요

 

2. PropertyValueException 예외란?

  • not-null에 null을 넣을 때 발생

 

3. DataIntegrityViolationException 예외란?

  • 데이터가 잘못 바인딩 됐을 때 발생

데이터 바인딩이란?
두 개의 데이터 소스(또는 동일한 데이터에 대한 두 개의 개별 표현)를 함께 연결하고
동기화 상태를 유지하는 일반적인 기술

  • 단방향 바인딩
    적절한 Event를 통해 데이터 흐름이 단방향으로 이루어지고(부모 -> 자식)
    뷰가 바로 업데이트 되지 않는다.
  • 양방향 바인딩
    데이터 변경에 따라 프레임워크를 통해 양방향으로 이루어지며(부모 <-> 자식)
    뷰가 즉각 업데이트 된다.

 

4. NoSuchElementException 예외란?

  • 값이 없을 때 발생
  • 중복 데이터가 있는데 하나만 뽑으려고 하는 경우에도 발생

 

5. 경우에 따라 예외를 강제로 실행 시키기

  • 오류를 통해 강제 예외를 발생 시켜야하는 경우 하기 코드를 참고하여 실행

  
throw new NullPointerException();

 

 

 

 


참고사이트

https://hbase.tistory.com/166

9. [JPA] @Enumerated

[Java Study 11] Enum

 

 

728x90