일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- MariaDB
- MongoDB
- 추상클래스
- DBMS
- IntelliJ
- java
- PostgreSQL
- docker
- 호이스팅
- 자바
- 트랜잭션
- mssql
- group by
- github
- 티스토리챌린지
- Python
- rsync
- oracle
- SQL
- mysql
- spring
- Javascript
- pandas
- git
- 리눅스
- 오블완
- 명령어
- analytics4
- JPA
- Linux
- Today
- Total
hanker
Java - Enum 클래스 사용법 본문
Enum 클래스는 Java에서 상수 집합을 정의하기 위한 특수한 데이터 타입이다.
Java 5에서 도입된 enum은 단순한 상수 나열 이상의 기능을 제공하며, 객체지향적인 설계를 도와준다.
이번 글에서는 Enum 클래스의 주요 특징과 사용법, 내부 메커니즘에 대해서 알아보자.
1. Enum 이란?
Enum은 한정된 상수들의 집합을 나타내며, 타입 안전성을 보장한다.
즉, 미리 정의된 값 이외의 값이 할당되지 않아 코드의 안정성을 높인다.
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
위의 예제는 요일을 상수로 정의한 Enum 이다.
2. Enum의 내부 구조와 동작
2-1. Java.lang.Enum 상속
모든 enum은 암묵적으로 java.lang.Enum 클래스를 상속 받는다.
이로 인해 enum은 이미 여러 유용한 메서드(ordianl(), compareTo(), toString())를 사용할 수 있다.
2-2. 상수의 객체화
각 enum 상수는 클래스의 단일 인스턴스이다.
즉, Day.MONDAY와 같은 상수는 객체로서 동작하며, 내부에 필드나 메서드를 가질 수 있다.
2-3. 생성자
Enum의 생성자는 암묵적으로 private이며, 외부에서 직접 호출할 수 없다.
이는 enum 상수가 미리 정의된 값으로만 생성되도록 보장한다.
2-4. 불변성과 타입 안전성
enum 상수는 불변이며, 정해진 값만을 가질 수 있어 컴파일 타임에 타입 체크가 가능하다.
3. 주요 메서드와 기능
3-1. values() 메서드
모든 enum 상수를 배열로 반환한다.
public class Main {
public static void main(String[] args) {
Day[] days = Day.values();
for(Day day : days) {
System.out.println(day);
}
}
}
3-2. valueOf(String name) 메서드
지정된 이름과 일치하는 enum 상수를 반환한다.
public class Main {
public static void main(String[] args) {
Day monday = Day.valueOf("MONDAY");
System.out.println(monday);
}
}
3-3. ordinal() 메서드
enum 상수가 선언된 순서를 0부터 시작하는 정수로 반환한다.
public class Main {
public static void main(String[] args) {
int index = Day.TUESDAY.ordinal();
System.out.println(index);
}
}
3-4. compareTo() 메서드
두 enum 상수 간의 순서를 비교한다.
3-5. toString() 메서드
기본적으로 enum 상수의 이름을 문자열로 반환하지만, 필요에 따라 오버라이드하여 커스텀 문자열 표현을 제공할 수 있다.
4. Enum에 필드와 메서드 추가하기
Enum은 단순히 상수 목록만을 담는 것이 아니라, 각 상수에 추가 정보를 부여하거나, 개별적인 동작을 정의할 수 있다.
4-1. 필드와 생성자 추가
public enum Color {
RED("빨강"),
GREEN("초록"),
BLUE("파랑");
private final String koreanName;
// 생성자는 암묵적으로 private 이다.
private Color(String koreanName) {
this.koreanName = koreanName;
}
public String getKoreanName() {
return koreanName;
}
}
각 Color 상수는 한글 이름을 갖게 되어, 추가 정보를 제공할 수 있다.
4-2. 추상 메서드 구현
Enum 내에 추상 메서드를 선언하고, 각 상수별로 서로 다른 구현을 제공할 수 있다.
public enum Operation {
PLUS {
public double apply(double x, double y) { return x + y; }
},
MINUS {
public double apply(double x, double y) { return x - y; }
};
public abstract double apply(double x, double y);
}
5. Enum 사용의 장점과 주의사항
장점
- 타입 안전성 : 미리 정의된 상수만 사용되므로 잘못된 값이 할당되는 오류를 방지할 수 있다.
- 가독성 : 코드가 직관적이며, 상수 값의 의미를 명확하게 표현할 수 있다.
- 유지보수 용이성 : 상수 집합이 중앙 집중적으로 관리되어, 향후 상수 추가나 변경이 용이하다.
- Switch 문 지원 : Enum은 switch 문에서 사용하기에 매우 적합하다.
주의사항
- 상속 제한 : 모든 enum은 java.lang.Enum을 상속 받기 때문에 다른 클래스를 상속할 수 없다.
- 동적 확장 불가 : 실행 중에 새로운 상수를 추가할 수 없으며, 선언 시 정해진 상수만 사용할 수 있다.
정리
Enum 클래스는 상수 값을 보다 안전하고 구조적으로 관리할 수 있는 강력한 도구이다.
단순한 상수 집합을 넘어서, 각 상수에 대한 추가 정보와 동작을 정의할 수 있어 복잡한 로직에서도 유용하게 활용된다.
Java 개발 시 가독성, 유지보수성, 안정성을 높이고자 할 때 Enum을 적극 활용하는 것이 좋다.
'JAVA' 카테고리의 다른 글
Java - Custom Annotation 만들기 (기본 개념과 구현 방법) (0) | 2025.02.25 |
---|---|
Java - Collection Framework의 꽃 Map 사용법 및 활용법 (0) | 2025.02.17 |
Java - Set 사용 법 (HashSet, TreeSet, LinkedHashSet) (0) | 2025.02.15 |
Java - List 인터페이스 (ArrayList, LinkedList, Vector 등) (1) | 2025.02.12 |
Java - 예외 처리의 활용 및 효율적인 관리 방법 (Custom Exception, Exception Propagation) (0) | 2025.02.10 |