Java/Spring

Java Enum

B.OCK 2023. 9. 14. 10:30
반응형

Enum 이란

Enum 은 Enumeration 의 약자이다. Enumeration 은 열거, 목록, 일람표 라는 뜻도 갖고 있으나 Java 에선

열거형이라고 부른다.

 


위키백과에 나와있는 컴퓨터 프로그래밍의 열거형, 이넘(enum) 은
요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자다.

 


자바 Enum 은 상수 컬렉션을 정의하는데 쓰이는 특수한 자바 유형(Type) 이다.
더 정확하게 말하면 Enum 은 특수한 자바 클래스이다. 열거형에는 상수, 메서드 등이 포함될 수 있으며
자바 5 버전부터 추가되었다.

 

Enum 을 사용하는 이유

  • 문자열과 비교해 IDE 의 적극적인 지원을 받을 수 있다.
    • 자동완성, 오타검증, 텍스트 리팩토링 등등
  • 허용 가능한 값들을 제한할 수 있다.
  • 리팩토링 시 변경 범위가 최소화 됩니다.
    • 내용이 추가될 경우 Enum 코드외는 수정할 필요가 없다.

 

Enum  정의하는 방법

enum 열거형이름 {
    상수명1, 상수명2, 상수명3 ....
}

열거형 상수는 필드를 가질 수 있다. 필드를 추가하는 방법은 private 키워드를 사용하여 필드를 정의하고

생성자를 생성하여 인자로 추가한 뒤 각각 상수에 값을 입력하면 된다.

예시는 아래와 같다.

package com.youth.market.test;

import lombok.Getter;

@Getter
public enum TestEnum {
	PLUS(1), MINUS(2), MULTIPLE(3), DEVIDE(4);
	
	private int value;
	TestEnum(int value){
		this.value = value;
	}
}

enum 에서 필드들은 private 로 정의해야 하며 public, default, protected 로 선언시에 컴파일 에러가 발생한다.

enum 타입은 고정된 상수들의 집합으로 enum 에 대한 모든 정보들은 런타임이 아닌 컴파일 할 때 고정되어야 한다.

그래서 컴파일 시 안정성을 보장하기 위해 private 생성자만 사용이 가능하고 다른 패키지나 클래스에서

enum 타입에 접근해서 동적으로 값을 지정할 수 없다.

 

Enum 이 제공하는 메서드

toString() 해당 상수의 이름을 문자열로 반환한다.
name() 해당 상수의 이름을 문자열로 반환한다.
compareTo() 정렬의 기준을 위한 메서드이다.
비교 대상보다 순서가 빠르면 -1, 같으면 0, 느리면 1을 반환한다
정렬 순서는 상수가 선언된 순서가 디폴트로 지정되어 있다.
ordinal() 상수의 선언 순서에 따른 인덱스 (Zero based) 값을 반환한다.
Enum 안에는 private final int ordinal; 이 정의되어 있고 이를 사용한다.
valueOf() 인자로 받은 이름과 같은 Enum 값으로 반환한다.
values() 선언된 모든 Enum 값을 순서대로 배열에 담아서 반환한다.

 

 

Enum.values()

열거형의 모든 상수를 배열에 담아 반환한다.

 

Enum.valueOf()

열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻는다.

 

 

반응형