Java enum(열거형)과 주요 메서드
코딩Java
읽는데 5분 소요
처음 쓰여진 날: 2026-02-17
마지막 수정일: 2026-02-17
조회수: 2
요약
Java enum(열거형)의 개념과 values(), name(), ordinal() 메서드 사용법을 알아봅니다. 정보처리기사 실기에 출제된 enum 문제를 풀기 위한 핵심 개념을 정리합니다.
enum 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| enum (열거형) | 상수들의 집합을 정의하는 특별한 클래스 | enum Color { RED, GREEN, BLUE } |
| values() | 모든 enum 상수를 선언 순서대로 배열로 반환 | Color.values() -> [RED, GREEN, BLUE] |
| name() | enum 상수의 이름을 문자열로 반환 | Color.RED.name() -> "RED" |
| ordinal() | enum 상수의 선언 순서(인덱스)를 반환 (0부터) | Color.GREEN.ordinal() -> 1 |
enum이란?
enum 은 enumeration(열거)의 줄임말로, 관련된 상수들을 하나의 그룹으로 묶어 정의하는 특별한 클래스입니다.
쉽게 말하면, "정해진 값들만 사용할 수 있도록 제한하는 것" 입니다.
java
코드 하이라이팅 중...
위 코드에서 Season은 SPRING, SUMMER, FALL, WINTER 네 가지 값만 가질 수 있습니다.
enum 상수는 대문자로 작성합니다
관례적으로 enum 상수는 대문자로 선언합니다. 예: SPRING, SUMMER 등. 시험 문제에서는 소문자로 나올 수도 있으니 유연하게 대처하세요.
필드와 생성자를 가진 enum
enum은 단순한 상수 나열뿐만 아니라, 필드(변수)와 생성자를 가질 수 있습니다. 이 부분이 시험에 출제됩니다.
java
코드 하이라이팅 중...
핵심 규칙
- 필드나 메서드가 있으면 enum 상수 목록 끝에 세미콜론(
;)이 필수입니다 - enum 생성자는 반드시 private입니다 (명시하지 않아도 자동으로 private)
- 각 enum 상수는 선언될 때 생성자를 통해 초기화됩니다
상수 이름과 생성자에 전달하는 값은 다릅니다
AB('A')에서 AB는 enum 상수의 이름이고, 'A'는 생성자에 전달되는 값입니다. 이 둘을 혼동하면 안 됩니다. name()은 상수 이름(AB)을, code()는 생성자에 전달된 값('A')을 반환합니다.
상수 이름 vs 전달 값 비교
| enum 상수 | 상수 이름 (name()) | 생성자에 전달한 값 (code()) |
|---|---|---|
AB("A") | "AB" | "A" |
A("AB") | "A" | "AB" |
C("ABC") | "C" | "ABC" |
enum의 주요 메서드
enum에는 자동으로 제공되는 메서드들이 있습니다. 시험에서 자주 사용되는 메서드를 정리합니다.
values()
모든 enum 상수를 선언 순서대로 배열로 반환합니다.
java
코드 하이라이팅 중...
name()
enum 상수의 이름을 문자열(String)로 반환합니다.
java
코드 하이라이팅 중...
name()은 상수 이름을 반환합니다
name()은 enum 상수가 선언된 이름 그대로를 문자열로 반환합니다. 생성자에 전달된 값이 아닙니다. Tri.A.name()은 'A'를 반환하지, 'AB'를 반환하지 않습니다.
ordinal()
enum 상수의 선언 순서(인덱스)를 반환합니다. 0부터 시작합니다.
java
코드 하이라이팅 중...
valueOf()
문자열 이름으로 enum 상수를 찾아 반환합니다.
java
코드 하이라이팅 중...
메서드 정리 표
| 메서드 | 반환 타입 | 설명 | 예시 (Tri.A 기준) |
|---|---|---|---|
values() | Tri[] | 모든 상수를 배열로 반환 | [AB, A, C] |
name() | String | 상수 이름을 문자열로 반환 | "A" |
ordinal() | int | 선언 순서(0부터) 반환 | 1 |
valueOf(String) | Tri | 문자열로 상수 찾기 | Tri.A |
실전 예제: 문제 풀이 과정
25년 3회 기출문제와 동일한 구조로 단계별 풀이를 연습합니다.
java
코드 하이라이팅 중...
단계별 분석
1단계: enum 상수 확인
| 인덱스 | enum 상수 | 상수 이름 (name()) | 전달 값 (code()) |
|---|---|---|---|
| 0 | AB("A") | "AB" | "A" |
| 1 | A("AB") | "A" | "AB" |
| 2 | C("ABC") | "C" | "ABC" |
2단계: Tri.A.name().length() 계산
java
코드 하이라이팅 중...
3단계: Tri.values()[1] 찾기
java
코드 하이라이팅 중...
따라서 t는 Tri.A입니다.
4단계: t.code() 출력
java
코드 하이라이팅 중...
Tri.A는 생성자에서 "AB"로 초기화되었으므로, code() 메서드는 "AB"를 반환합니다.
실행 순서 추적
| 순서 | 코드 | 결과 |
|---|---|---|
| 1 | Tri.A.name() | "A" |
| 2 | "A".length() | 1 |
| 3 | Tri.values()[1] | Tri.A |
| 4 | Tri.A.code() | "AB" |
| 5 | System.out.print("AB") | 출력: AB |
name()과 code()를 혼동하지 마세요
이 문제의 핵심은 name()이 상수 이름을 반환하고, code()는 생성자에 전달된 값을 반환한다는 점입니다. Tri.A.name()은 'A'이고, Tri.A.code()는 'AB'입니다.