github.com/whiteship/live-study/issues/11
목표자바의 열거형에 대해 학습하세요. 학습할 것 (필수)
|
1. enum 정의하는 방법
열거 타입(enum) : 한정된 값만을 갖는 데이터 타입. 몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입.
열거 타입 선언 : 관례적으로 첫 문자를 대문자로, 나머지는 소문자로 구성 (클래스와 동일한 명명규칙)
public enum 열거타입이름 {
// 열거 상수 : 관례적으로 모두 대문자로 선언
}
열거 타입 변수 : 열거 상수 중 선택 (참조 타입이기 때문에 null 값 저장 가능)
열거 타입 변수 = 열거타입.열거상수;
열거 상수도 객체. 메소드 영역에서 열거 객체(heap영역)을 참조!
- 열거 타입에 생성자, 메소드, 필드 추가 가능
- 열거의 생성자는 언제나 private ( 생략 가능. but 접근 제한 변경은 컴파일 오류)
- enum 인스턴스 각각에 메소드 추가 가능.(열거에 정의된 메소드를 Override하는 것이어야 함)
- 정적 멤버 추가 가능 ( 열거 상수가 정적 멤버보다 먼저 생성되기 때문에, 열거 생성자에서 정적 멤버 참조 불가)
2. enum이 제공하는 메소드 (values()와 valueOf())
리턴 타입 | 메소드(매개변수) | 설명 |
열거 타입 (번지리턴) | valuesOf(String name) | 주어진 문자열의 열거 객체를 리턴 |
열거 배열 ( 열거타입 배열) | values() | 모든 열거 객체들을 배열로 리턴 |
Week weekDay = Week.valueOf("SATURDAY");
Week[] days = Week.values();
3. java.lang.Enum
기술적으로 E 열거 타입은 Enum<E>를 확장하며, Enum<E>의 메소드를 상속한다.
java.lang.Enum<E> 클래스의 메소드
메소드 | 설명 |
String toString() String name() |
enum 선언에 지정한 대로 인스턴스 이름을 반환한다. name 메소드는 final이다. |
int ordinal() | enum 선언에서 인스턴스 위치를 반환한다. |
int compareTo(Enum<E> other) | 이 인스턴스와 other를 순서 값으로 비교한다. |
static T valueOf(Class<T> type, String name) | 이름에 해당하는 인스턴스를 반환한다. 이 메소드 대신 열거 타입의 valueOf 또는 values 메소드를 사용한다. |
Class<E> getDeclaringClass() | 인스턴스를 정의한 클래스를 얻는다(인스턴스에 바디가 있으면 getClass()와 다른 결과를 반환한다). |
int hashCode() protected void finalize() |
이 메소드들은 각각 대응하는 Object 메소드를 호출하며, final이다. |
protected Object clone() | CloneNotSupportedException을 던진다. |
4. EnumSet
EnumsSet : 열거 타입 상수의 값으로 구성된 집합을 효과적으로 표현해준다. Set 인터페이스를 완벽히 구현하며, type-safe하고, 타 Set 구현체와 함께 사용 가능하다.
class Text2{
public enum Style {BOLD, ITALIC, UNDERLINE, STRIKETHROUGH}
// 어떤 Set을 넘겨도 되지만, EnumSet이 가장 좋다.
public void applyStyles(Set<Style> styles){}
}
//applyStyles에 enumSet 인스턴스를 건네는 클라이언트 코드
text2.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
출처 : 이것이 자바다 (신용권 저), 가장 빨리 만나는 코어 자바9 (카이 호스트만 저), Practical 모던 자바 (장윤기 저)
'Programming > Java' 카테고리의 다른 글
[whiteship 온라인 스터디] 14주차 과제: 제네릭 (0) | 2021.02.27 |
---|---|
[whiteship 온라인 스터디] 12주차 과제: 애노테이션 (0) | 2021.02.25 |
[whiteship 온라인 스터디] 10주차 과제 - 멀티쓰레드 프로그래밍 (0) | 2021.02.24 |
[whiteship 온라인 스터디] 9주차 과제 - 예외처리 (0) | 2021.02.13 |
[whiteship 온라인 스터디] 8주차 과제 - 인터페이스 (0) | 2021.02.13 |