코딩마을방범대
Enum 에 대하여 본문
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();
참고사이트
728x90
'💡 백엔드 > Java' 카테고리의 다른 글
Autowired를 지양하는 이유 & 정규표현식 (0) | 2023.05.25 |
---|---|
스케쥴러(Scheduler)에 대하여 (1) | 2023.05.25 |
SpringBoot에서 JSON 활용하기 (0) | 2023.05.25 |
Builder를 사용해야 하는 이유 & 포스트맨의 변수 (0) | 2023.05.25 |
MyBatis 기본 세팅과 활용 (0) | 2023.05.25 |