일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- asyncawait
- javascript
- java_this
- 생성형AI
- java 제네릭
- java스터디
- java 애노테이션
- java 추상 클래스
- Java 자료구조
- java super메소드
- ai활용법
- javautil패키지
- gpt활용팁
- javatime
- java 람다식
- JAVA데이터타입
- java반복문
- java 메서드 오버라이딩
- 티스토리챌린지
- 창의적도구
- 오블완
- java final 키워드
- import 키워드
- java
- java objact클래스
- java 이진트리
- 화살표연산자
- binraytree
- this키워드
- java 패키지
- Today
- Total
코딩쿠의 코드 연대기
Java) Enum 본문
학습목표
- enum 정의하는 방법
- enum이 제공하는 메소드 (values()와 valueOf())
- java.lang.Enum
- EnumSet
enum 정의하는 방법
Java에서 enum(열거형)을 정의하는 방법은 다음과 같습니다.
Java
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
설명:
enum
키워드를 사용하여 열거형을 선언합니다.- 열거형 이름은 일반적으로 대문자로 시작합니다 (예:
요일
). - 중괄호
{}
안에 열거형 상수들을 쉼표로 구분하여 나열합니다. - 열거형 상수는 기본적으로
public
,static
,final
입니다.
예제:
Java
public class EnumExample {
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
public static void main(String[] args) {
요일 오늘 = 요일.수요일;
System.out.println(오늘); // 출력: 수요일
}
}
enum의 장점:
- 가독성 향상: 코드를 읽고 이해하기 쉽습니다.
- 타입 안정성: 컴파일 타임에 오류를 확인할 수 있습니다.
- 유지보수 용이: 코드 변경이 쉽습니다.
- 확장성: 필요에 따라 새로운 상수를 추가할 수 있습니다.
추가 정보:
- enum은 클래스처럼 생성자, 메서드, 필드를 가질 수 있습니다.
ordinal()
메서드를 사용하여 상수의 순서 값(0부터 시작)을 얻을 수 있습니다.values()
메서드를 사용하여 모든 상수를 배열로 얻을 수 있습니다.
더 자세한 내용은 다음 링크를 참조하십시오.
- Java enum(열거형) - 코딩 잘하고 싶어 - 티스토리
- [Java] Enum 정의와 활용 - velog
- 자바 Enum 열거형 타입 문법 & 응용 정리 - Inpa Dev - 티스토리
enum이 제공하는 메소드 (values()와 valueOf())
Java enum은 기본적으로 values()
와 valueOf()
메소드를 제공합니다. 이 메소드들은 enum 상수들을 다루는 데 유용하게 사용됩니다.
1. values() 메소드
- 기능: enum에 정의된 모든 상수들을 순서대로 포함하는 배열을 반환합니다.
- 반환 타입:
enum 타입[]
(예:요일[]
) - 사용 예시:
Java
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
public class EnumExample {
public static void main(String[] args) {
요일[] 요일들 = 요일.values();
for (요일 요일 : 요일들) {
System.out.println(요일);
}
// 출력:
// 월요일
// 화요일
// 수요일
// 목요일
// 금요일
// 토요일
// 일요일
}
}
2. valueOf() 메소드
- 기능: 주어진 문자열과 일치하는 이름을 가진 enum 상수를 반환합니다.
- 매개변수:
String
(enum 상수의 이름) - 반환 타입:
enum 타입
(예:요일
) - 예외: 주어진 문자열과 일치하는 enum 상수가 없으면
IllegalArgumentException
이 발생합니다. - 사용 예시:
Java
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
public class EnumExample {
public static void main(String[] args) {
요일 오늘 = 요일.valueOf("수요일");
System.out.println(오늘); // 출력: 수요일
}
}
주의 사항: valueOf()
메소드에 전달하는 문자열은 enum 상수의 이름과 정확히 일치해야 합니다. 대소문자도 구분합니다.
활용 예시:
values()
메소드는 enum의 모든 상수를 순회하며 작업을 수행할 때 유용합니다. 예를 들어, 모든 요일에 대한 작업을 처리하거나, 드롭다운 목록에 모든 요일을 표시할 때 사용할 수 있습니다.valueOf()
메소드는 외부에서 문자열 형태로 enum 값을 입력받아 처리할 때 유용합니다. 예를 들어, 사용자로부터 요일을 입력받아 해당 요일에 대한 정보를 출력하는 프로그램을 작성할 수 있습니다.
이 외에도 enum은 ordinal()
, name()
, compareTo()
등의 메소드를 제공합니다.
java.lang.Enum
java.lang.Enum
은 Java에서 모든 열거형(enum
)의 최상위 클래스입니다. 즉, 사용자가 정의하는 모든 enum은 암묵적으로 java.lang.Enum
클래스를 상속받습니다.
java.lang.Enum
클래스는 enum 타입들이 공통적으로 가지는 메서드들을 제공하며, enum을 다루는 데 필요한 기능들을 포함하고 있습니다.
주요 특징:
- 추상 클래스:
java.lang.Enum
은 추상 클래스이기 때문에 직접 인스턴스를 생성할 수 없습니다. - final 클래스:
java.lang.Enum
은 final 클래스이기 때문에 다른 클래스가java.lang.Enum
을 상속할 수 없습니다. - 생성자:
java.lang.Enum
은 protected 생성자를 가지고 있어서, enum 상수들이 인스턴스화될 때 사용됩니다. 사용자가 직접 enum의 생성자를 호출할 수는 없습니다.
주요 메서드:
name()
: enum 상수의 이름을 문자열로 반환합니다.ordinal()
: enum 상수의 순서 값(0부터 시작)을 정수로 반환합니다.compareTo(E o)
: 현재 enum 상수와 지정된 enum 상수의 순서를 비교합니다.equals(Object other)
: 현재 enum 상수와 지정된 객체가 같은지 비교합니다.hashCode()
: enum 상수의 해시 코드를 반환합니다.toString()
: enum 상수의 이름을 문자열로 반환합니다. (기본적으로name()
과 동일한 결과를 반환합니다.)valueOf(Class<T> enumType, String name)
: 지정된 이름을 가진 enum 상수를 반환합니다.values()
: enum에 정의된 모든 상수들을 배열로 반환합니다. (각 enum 타입에 대해 컴파일러가 자동으로 생성합니다.)
활용:
java.lang.Enum
클래스는 enum 타입을 다루는 데 필요한 기본적인 기능을 제공합니다.
name()
메서드는 enum 상수를 문자열로 표현해야 할 때 유용합니다.ordinal()
메서드는 enum 상수의 순서를 기반으로 작업을 수행할 때 유용합니다.compareTo()
메서드는 enum 상수들을 정렬할 때 유용합니다.
예제:
Java
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
public class EnumExample {
public static void main(String[] args) {
요일 오늘 = 요일.수요일;
System.out.println(오늘.name()); // 출력: 수요일
System.out.println(오늘.ordinal()); // 출력: 2
}
}
이처럼 java.lang.Enum
클래스는 Java enum의 기반을 이루는 중요한 클래스입니다. enum을 사용할 때 java.lang.Enum
클래스가 제공하는 메서드들을 활용하면 enum을 더욱 효과적으로 사용할 수 있습니다. 궁금한 점이 있다면 언제든지 질문하세요! 😊
EnumSet
EnumSet
은 Java Collections Framework에 포함된 특수한 Set 구현체로, enum 타입의 요소만 저장할 수 있도록 설계되었습니다.
일반적인 HashSet
과 같은 Set 구현체와 비교했을 때, EnumSet
은 enum에 최적화되어 더 빠르고 효율적인 연산을 제공합니다.
주요 특징:
- 타입 안전성:
EnumSet
은 특정 enum 타입의 상수만 저장할 수 있으므로, 컴파일 타임에 타입 안전성을 보장합니다. - 성능: 내부적으로 비트 벡터를 사용하여 구현되어 있어,
HashSet
보다 메모리 사용량이 적고 연산 속도가 빠릅니다. - null 허용 안 함:
EnumSet
에는null
값을 저장할 수 없습니다.null
을 추가하려고 하면NullPointerException
이 발생합니다. - 구현:
EnumSet
은 추상 클래스이며,RegularEnumSet
과JumboEnumSet
두 가지 구현체를 갖습니다. enum의 요소 개수에 따라 적절한 구현체가 선택됩니다.
장점:
- 가독성 및 유지보수: enum 상수를 사용하여 코드를 명확하게 작성할 수 있으며, 유지보수가 용이합니다.
- 효율성: 비트 벡터를 사용하여 구현되어 있어, 메모리 사용량이 적고 연산 속도가 빠릅니다. 특히 많은 수의 enum 상수를 다룰 때 성능 이점이 두드러집니다.
생성 방법:
EnumSet
은 생성자를 제공하지 않고, 정적 팩토리 메서드를 통해 인스턴스를 생성합니다. 몇 가지 주요 메서드는 다음과 같습니다.
allOf(Class<E> elementType)
: 지정된 enum 타입의 모든 상수를 포함하는EnumSet
을 생성합니다.noneOf(Class<E> elementType)
: 지정된 enum 타입의 상수를 포함하지 않는 빈EnumSet
을 생성합니다.of(E first, E... rest)
: 지정된 enum 상수들을 포함하는EnumSet
을 생성합니다.range(E from, E to)
: 지정된 범위의 enum 상수들을 포함하는EnumSet
을 생성합니다.
활용 예시:
Java
enum 요일 {
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
public class EnumSetExample {
public static void main(String[] args) {
// 모든 요일을 포함하는 EnumSet
EnumSet<요일> 모든요일 = EnumSet.allOf(요일.class);
// 주말을 포함하는 EnumSet
EnumSet<요일> 주말 = EnumSet.of(요일.토요일, 요일.일요일);
// 평일을 포함하는 EnumSet
EnumSet<요일> 평일 = EnumSet.complementOf(주말);
System.out.println("모든 요일: " + 모든요일); // 출력: 모든 요일: [월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일]
System.out.println("주말: " + 주말); // 출력: 주말: [토요일, 일요일]
System.out.println("평일: " + 평일); // 출력: 평일: [월요일, 화요일, 수요일, 목요일, 금요일]
}
}
요약:
EnumSet
은 enum 타입에 특화된 Set 구현체로, 성능과 타입 안전성을 동시에 제공합니다. enum 상수를 다루는 작업이 많거나 성능이 중요한 경우 EnumSet
을 사용하는 것이 좋습니다.
'코딩스터디 > JAVA스터디' 카테고리의 다른 글
Java) I/O (0) | 2024.11.19 |
---|---|
Java 애노테이션 (3) | 2024.11.18 |
Java 멀티쓰레드 프로그래밍 (2) | 2024.11.16 |
Java 예외 처리 (4) | 2024.11.15 |
Java) 인터페이스 (interface) (6) | 2024.11.14 |