JAVA/STUDY

[Java] Enum 열거형 타입

코맹 2024. 8. 9. 11:28

 

 

Enum이란?

 

  • Enum은 "Enumeration"의 약자로, "열거, 목록, 일람표"라는 뜻을 가지고 있으며 한글로는 열거형이라고 부른다.
  • 즉, 열거형(enum)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형으로, 상수 데이터들의 집합이다.

 

  • 프로그래밍을 하다보면 배열이나 리스트 등 여러 개의 묶음 데이터를 다루는 일이 많다.
  • 이 묶음 데이터 중에는 데이터 주제에 따라 몇가지로 한정된 값만을 가는 경우가 존재한다.
  • ex) 요일, 계절, 주사위 등
  • 이와 같이 정해져 있는 한정된 데이터 묶음을 열거형 타입인 Enum으로 묶어주면 보다 구조적으로 프로그래밍을 할 수 있다.

 

 

Enum 장점

 

  • 코드가 단순해지며 가독성이 좋아진다.
  • 허용 가능한 값들을 제한하여 유형 안전을 제공한다.
  • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.
  • 자체 클래스 상수와 달리 switch문에서도 사용할 수 있다.
  • 리팩토링시 변경 범위가 최소화된다.
    (Enum에서 한번에 관리하기 때문에 내용의 추가가 필요하더라도, Enum 코드 외에 수정할 필요가 없다.)
  • enum은 본질적으로 싱글톤 객체이므로 싱글톤 클래스를 생성하는 데에도 사용된다.

 

 

Enum 선언

 

열거 타입은 상수 데이터들의 집합이므로 아래와 같이 배열처럼 나열하여 표시하면 된다.
  • enum명은 클래스와 같이 첫 문자를 대문자로 하고 나머지는 소문자로 구성한다.
  • 관례적으로, 열거 상수는 대문자로 작성한다.
  • 열거 상수가 여러 단어로 구성될 경우, 단어 사이를 밑줄 (_)로 연결한다.
// 요일 열거 타입
enum Week {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}
// 계절 열거 타입
enum Season {
    Spring,
    Summer,
    Autumn,
    Winter
}
enum LoginResult {
	LOGIN_SUCCESS,
	LOGIN_FAILED
}

 

 

 

Enum 참조 방식

 

Enum 타입 객체도 하나의 데이터 타입이므로 변수를 선언하고 사용하면 된다.
// 열거타입 변수 = 열거타입.열거상수;
Week monday = Week.MONDAY;
Week sunday = Week.SUNDAY;

 

  • enum 타입은 특수한 클래스
  • 즉, primitive 타입이 아닌 reference 타입으로 분류되며, enum 상수 값은 힙(heap) 영역에 저장된다.

 

  • String처럼 스택 영역에 있는 변수들이 힙 영역에 있는 데이터의 주소 값을 저장함으로써 참조 형태를 띄게 된다.
  • 같은 enum 타입 변수낄 같은 상수 데이터를 바라봄으로써 둘이 주소를 비교하는 == 연산 결과는 true가 된다.
Week today = null; // 참조 타입이기 때문에 null도 저장 가능
today = Week.SUNDAY;

// 주소값 비교
System.out.println(today == Week.SUNDAY); // true

 

 

 

 

 

참고 자료

 

Java - 메모리 구조(Method, Stack, Heap)

자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리를 한다.JVM의 메모리 공간(Runtime Data Area)은 크게 Method(Static)

velog.io

 

 

☕ 자바 Enum 열거형 타입 문법 & 응용 💯 정리

Enum 열거 타입 먼저 Enum은 "Enumeration"의 약자다. Enumeration은 "열거, 목록, 일람표" 라는 뜻을 가지고 있으며, 보통 한글로는 열거형이라고 부른다. 즉, 열거형(enum)은 요소, 멤버라 불리는 명명된 값

inpa.tistory.com

 

'JAVA > STUDY' 카테고리의 다른 글

[Java] Optional 사용  (0) 2025.04.10
[JAVA] 멀티 스레드(1)  (2) 2024.02.15
[JAVA] 배열 (Array)  (2) 2024.02.14
[JAVA] 조건문과 반복문(if, switch, for, while문)  (3) 2024.02.12
[JAVA] 자바 변수, 선언, 초기화  (2) 2024.02.12