나의 Study 기록
[Java] Enum
잉쿠엥쿠
2024. 3. 25. 16:45
1. Enum 이란?
Enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖습니다. 관련이 있는 상수들의 집합입니다. 자바에서는 final로 String과 같은 문자열이나 숫자들을 나타내는 기본 자료형의 값을 고정할 수 있습니다. 이렇게 고정된 값을 상수라고 합니다. 영어로는 constant입니다. 어떤 클래스가 상수만으로 작성되어 있으면 반드시 class로 선언할 필요는 없습니다. 이럴 때 class로 선언된 부분에 enum이라고 선언하면 이 객체는 상수의 집합이다. 라는 것을 명시적으로 나타냅니다.
2. Enum의 특징
1) 상수로 사용할 수 있다.
- 생성자는 private로 작성해야됩니다. Default 생성자 또한 private입니다.
public enum BodyPart {
BACK, CHEST
}
- 사용하기 위해서는 BodyPart.Back 이런 식으로 작성해야됩니다.
2) 메서드를 정의할 수 있다.
- enum 클래스는 상수와 함께 메서드를 정의할 수 있습니다. 이 메서드는 enum 상수와 관련된 동작을 수행하거나, enum 상수를 이용한 값을 반환할 수 있습니다.
- BodyPart.BACK.getMessage() -> "등" 이러한 형식으로 사용할 수 있습니다.
@Getter
public enum BodyPart {
BACK("등"),
CHEST("가슴"),
private final String message;
BodyPart(String message) {
this.message = message;
}
}
3) 싱글톤 패턴
- enum 클래스는 싱글톤 패턴을 구현하는 데 사용됩니다. 이는 enum 클래스 내에서 정의된 상수가 애플리케이션 전체에서 단 하나의 인스턴스만 존재함을 보장하기 때문입니다.
3. 내부 API
1) values()
- 'values()' 메서드는 enum 클래스의 모든 상수를 배열 형태로 반환합니다.
BodyPart[] bodyParts = BodyPart.values();
2) valueOf()
- 'valueOf()' 메서드는 문자열로 표현된 상수 이름을 이용하여, 해당 상수의 참조(인스턴스)를 반환합니다. 만약 해당하는 상수가 없을 경우 IllegalArgumentException이 발생합니다.
BodyPart bodyPart = BodyPart.valueOf("BACK");
3) name()
- 'name()' 메서드는 상수의 이름을 문자열 형태로 반환합니다.
String name = BodyPart.BACK.name(); // "BACK"
4) ordinal()
- 'ordinal()' 메서드는 상수의 순서를 반환합니다. 첫 번째 상수는 0부터 시작합니다.
int ordinal = BodyPart.BACK.ordinal(); // 0
5) compareTo()
- 'compareTo()' 메서드는 해당 enum 상수와 다른 enum 상수를 비교합니다. 비교 결과는 순서에 따라 -1, 0, 1 중 하나의 값을 반환합니다.
int result = BodyPart.BACK.compareTo(BodyPart.CHEST); // -1
6) equals()
- 'equals()' 메서드는 해당 enum 상수와 다른 객체를 비교합니다. 비교 결과는 boolean 형태로 반환합니다.
boolean isEqual = BodyPart.BACK.equals(BodyPart.CHEST); // false
출처 :
https://velog.io/@10000doo/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Enum-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0