Enum이란?
자바에서 enum은 열거형 타입으로, 특정 값들의 집합을 상수처럼 사용할 수 있게 해주는 자료형이다.
enum은 서로 연관된 상수 집합을 보다 안전하고 직관적으로 다룰 수 있도록 설계된 특수한 형태의 클래스라고 볼 수 있다.
enum의 기본 사용법
EnumClass는 다른 클래스와 마찬가지로 별도의 java파일로, 클래스 안과 클래스 밖에 선언이 가능하다.
위와 같이 정의된 Day 열거형을 사용하여 각 요일을 `Day.MONDAY`, `Day.TUESDAY`와 같이 명확하게 표현할 수 있다.
enum의 특징과 장점
- 타입 안전성: enum을 사용하면 잘못된 값을 방지할 수 있다. 예를 들어, Day 타입에는 MONDAY에서 SUNDAY까지의 값만 포함되므로, 다른 값을 할당할 수 없다.
- 가독성: enum을 사용하면 코드가 더 명확해진다. 예를 들어 MONDAY, TUESDAY 등 의미 있는 이름을 사용함으로써 코드 가독성이 높아진다.
- 불변성: enum 상수는 변경할 수 없는 값으로, 값이 한 번 정의되면 수정할 수 없다. 때문에 코드의 안전성이 높아진다.
- switch문과의 호환성: enum은 switch문에서 사용할 수 있어, 여러 조건에 따라 코드를 쉽게 나눠 구현할 수 있다.
- 내장 메서드 제공: enum은 `name()`, `ordinal()`, `values()` 같은 메서드를 기본 제공하여, 열거형 상수의 이름, 순서, 전체 목록을 쉽게 가져올 수 있다.
enum에 메서드와 필드 추가
- Java에서 enum은 특수한 형태의 클래스이기 때문에, 필드와 메서드를 추가하여 각 상수에 속성을 부여하거나 동작을 정의할 수 있다.
위와 같이 정의된 Day 열거형에서 각 상수는 `message`라는 필드를 가지며,
`getMessage()` 메서드를 통해 해당 필드를 읽을 수 있다.
enum의 주요 내장 메서드
enum은 `java.lang.Enum` 클래스를 기본으로 상속받아 몇 가지 유용한 메서드를 자동으로 갖고 있다.
메서드 사용 예시
- values() : 정의된 모든 상수를 배열로 반환
- valuesOf(String arg) : 지정된 이름과 일치하는 enum 상수 반환
- compareTo(E o) : 다른 enum 상수와 순서를 비교하여 알맞은 정수 반
enum 사용 시 주의 사항
- 상속 불가: enum은 클래스처럼 사용되지만, final이 암묵적으로 적용된 형태여서 다른 클래스가 상속할 수 없다.
- 동적 값 추가 불가: enum에 정의된 상수는 코드에서 고정된 값으로, 런타임 중에 새로운 상수를 추가할 수 없다.
- 메모리 사용: 각 상수가 고유의 인스턴스로 관리되므로, 많은 상수를 정의하면 메모리를 많이 사용할 수 있다.
- 우아한프리코스 3주차 과제의 프로그래밍 요구사항에 Java Enum을 적용하여 프로그램을 구현하라는 내용이 있어서 Enum에 대해서 알아보았다. 종종 들어본 단어이긴 했지만, 이렇게 제대로 공부해본것은 처음이라 낯설게 느껴지기도 했다. 하지만 상수를 관리하고 의미를 부여하는 매우 유용한 프로그래밍 도구인 것 같다.
이번 3주차에 enum을 잘 적용해 더 성장한 코드를 작성해보자!!! 아자!!!!!!!!!!!!!!!!!!!!아자!!!!
출처
https://limkydev.tistory.com/50
[Java] enum 이란?
Enum class란? 우리가 흔히 상수를 정의할 때 final static string 과 같은 방식으로 상수를 정의를합니다. 하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생됩니다. 따라서 이러한 문제
limkydev.tistory.com
https://limkydev.tistory.com/66
[Java] Enum의 사용법
안녕하세요. 지난 시간엔 EnumClass가 무엇이고 어떤 장점들이 있는지 알아보았습니다. 2017/06/27 - [Java] - [Java] enum 이란? (enum 개념익히기) 이번 시간은 Enum 사용방법을 더 알아보면서 Enum에 대한 이
limkydev.tistory.com
'JAVA' 카테고리의 다른 글
Garbage Collection (2) | 2025.01.17 |
---|---|
자바 컬렉션 프레임워크 (0) | 2024.12.10 |
오버로딩 vs 오버라이딩 (7) | 2024.10.23 |
자바에서의 Error & Exception (0) | 2024.10.21 |
JDK/JRE/JVM 개념 (0) | 2024.10.14 |