Enum이란 무엇인가?
enum은 열거, 목록 이라는 뜻을 가진 Enumeration 의 약자로 서로 관련있는 상수들의 집합이며,
JAVA 계절이나 요일, 과목 등 변하지 않는데이터들을 정의 할 때 사용 할 수 있습니다.
Enum 의 장점.
- 허용 가능한데이터를 제한 할 수 있습니다.
- 코드를 수정 시 enum만 수정 하면 되기때문에 유지 보수에 용이합니다.
- 컴파일 단계에서 테입의 유효성검사를 진행 할 수 있습니다.
- 코드의 가독성이 좋아지고 단순해집니다
- 인스턴스의 생성과 상속을 방지하여 안정성을 보장합니다.
특징.
Java에서 enum은 인터페이스와 같은 독립된 특수한 클래스 로 구분합니다.
일종의 객체이기 때문에 메모르는 heap 영역에 저장되며, 완벽하게 독립된 상수를 구성 할 수 있습니다.
또한 이전 포스팅에서 학습한 싱글톤 클래스를 만드는데 사용이 될 수 있다는 특징이 있습니다.
기본적인 문법
1.선언
- enum명은 클래스와 같이 첫 문자를 대문자로 작성하고 나머지를 소문자로 작성합니다.
- 열거 상수는 모두 대문자로 작성합니다.
- 상수가 여러 단어로 구성 될 경우 단어 사이를 (_) 밑줄로 연결 합니다. 2.참조 방식Enum 타입 객체도 하나의 데이터 타입이므로 변수를 선언하고 사용하면 됩니다.
// 요일 열거 타입 enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } // 로그인 결과 enum LoginResult { LOGIN_SUCCESS, LOGIN_FAILED }// 열거타입 변수 = 열거타입.열거상수; Week monday = Week.MONDAY; Week sunday = Week.SUNDAY;
3. Enum 매핑
Season 이라는 Enum 이있는데 만일 SPRING 상수를 가져오면 "봄" 이라는 상수의 고유 값(value)를 출력하고 싶을때 매핑을 사용 할 수 있습니다.
// enum 매핑 클래스
enum Season {
SPRING("봄"),
SUMMER("여름"),
FALL("가을"),
WINTER("겨울");
// 문자열을 저장할 필드
private String season;
// 생성자 (싱글톤)
private Season(String season) {
this.season = season;
}
// Getter
public String getSeason() {
return season;
}
}
public static void main(String[] args) throws Exception {
Season s = Season.SUMMER;
System.out.println(s.name()); // 열거 객체명 출력 : SUMMER
System.out.println(s.getSeason()); // 매핑된 열거 데이터 출력 : 봄
}
이런식으로 사용이 가능한 이유는 enum은 상수 하나당 자신의 인스턴스를 하나씩 만들어 ( public static final ) 필드로 공개 하기 때문입니다
즉 이런 식의 코드를 내부적으로 만들어 줍니다.
/* 타입 안전 열거 패턴(typesafe enum pattern) */
final class Season {
public static final Season SPRING = new Season("SPRING"); // 자기자신의 인스턴스를 만들어 상수화
public static final Season SUMMER = new Season("SUMMER");
public static final Season AUTUMN = new Season("AUTUMN");
public static final Season WINTER = new Season("WINTER");
private String season;
private Season(String season) {
this.season = season;
}
public String getSeason() {
return season;
}
}
그럼 지금까지 학습한 클래스에서 생성자를 이용해 객체를 만드는 모습과 완전 동일한것을 확인 할 수 있습니다.
4. Enum 확장
사실 해당 파트는 아직 조금 어렵고 실제로 활용하려면 힘들 수 있을거같지만 일단 개념을 정리 하자면,
Enum을 상수 변수 뿐만 아니라 상수 메서드로 만들어서 사용이 가능하고 합니다.
각 상수마다 메서드 재정의를 하게해서 상수마다 다른 역할을 하는 메서드를 갖게 할 수 있습니다.
과제에도 적용해볼까 했지만, 그럼 Calculator class의 존재 의미가 사라지는거같아 저는 적용하지는 않았습니다.
enum Operation {
PLUS("+") {
public double apply(double x, double y) {
return x + y;
}
},
MINUS("-") {
public double apply(double x, double y) {
return x - y;
}
},
MULTI("*") {
public double apply(double x, double y) {
return x * y;
}
},
DIVIDE("/") {
public double apply(double x, double y) {
return x / y;
}
};
// 클래스 생성자와 멤버
private final String symbol;
Operation(String symbol) {
this.symbol = symbol;
}
// toString을 재정의하여 열거 객체의 매핑된 문자열을 반환하도록
@Override
public String toString() {
return symbol;
}
// 열거 객체의 메소드에 사용될 추상 메소드 정의
public abstract double apply(double x, double y);
}
public static void main(String[] args) {
double x = 2.5;
double y = 5.0;
// Operation 상수집합의 PLUS 상수를 정의
Operation plus = Operation.PLUS;
// enum 매핑값 출력
String name = plus.toString();
System.out.println(name); // +
// enum 확장 메소드 실행
double result = plus.apply(x, y); // 덧셈을 수행하는 메소드 (Operation.PLUS.apply(x, y) 로 해도됨)
System.out.println(result); // 7.5
// ------------------------------------------------------------------- //
// Operation 상수집합의 PLUS 상수를 정의
Operation multi = Operation.MULTI;
String name = plus.toString();
System.out.println(name); // *
// enum 확장 메소드 실행
double result2 = multi.apply(x, y); // 곱셈을 수행하는 메소드
System.out.println(result2); // 12.5
}
이렇게 enum은 상태와 행위를 한곳에서 관리가 가능하다는 특징이있서 강력한 기능을 제공해주는 특징이있습니다.
사실 enum에 대해서 이번 과제에서 거의 겉핥기식으로 공부를 한거같은데,
저에게 있어서 그만큼 어려운 개념기때문에 앞으로 과정에서 자주자주 활용해 볼 수 있었음 좋겠습니다.

[JAVA] Enum(열거형) 개념과 예제
Enum 이란?enum은 'Enumeration' 의 약자로 열거, 목록 이라는 뜻을 가지고 있다. 말 그대로 관련있는 상수들의 집합이며 JAVA에서는 final로 String, int 등을 나타내는 일정 개수의 기본 자료형의 값을 고정
devjanghwa.tistory.com
☕ 자바 Enum 열거형 타입 문법 & 응용 💯 정리
Enum 열거 타입 먼저 Enum은 "Enumeration"의 약자다. Enumeration은 "열거, 목록, 일람표" 라는 뜻을 가지고 있으며, 보통 한글로는 열거형이라고 부른다. 즉, 열거형(enum)은 요소, 멤버라 불리는 명명된 값
inpa.tistory.com
'TIL' 카테고리의 다른 글
| 삭제한데이터를 undo 하는 기능 만들기 (0) | 2026.01.14 |
|---|---|
| 이중콜론(::)(매서드 참조)표현식 (0) | 2026.01.14 |
| Flowchart에 대하여. (0) | 2026.01.13 |
| 싱글톤 패턴(Singleton Pattern)이란? (1) | 2026.01.13 |
| Garbage Collection(GC) 이란? (0) | 2026.01.12 |