본문 바로가기
Study/Java_study

Java_study_11 (Enum)

by hjshims 2021. 9. 7.

♨학습내용

더보기

enum 정의하는 방법

enum이 제공하는 메소드 (values()와 valueOf())

java.lang.Enum

EnumSet

 

  • enum 정의하는 방법

- 값 뿐만 아니라 타입까지 관리한다.

- 열거형 상수간의 비교는 '==' 사용이 가능하다.

- 비교연산자 '<', '>' 는 사용할 수 없고, compareTo()는 사용이 가능하다.

 

  • enum 정의

- {}안에 상수의 이름을 나열하면 된다.

enum 열거형이름 {
    상수명1, 상수명2, 상수명n
}
enum Food{
	HAMBURGER, PIZZA;
}

 

- 가장 먼저 선언한 값은 상수0 값을 가지고 순서대로 1씩 증가한다.

- 열거체의 상수값을 문자열과 함께 사용할 수 있다.

 

enum Food{
	HAMBURGER("햄버거"),
	PIZZA("피자");

	private final String name;
    
	Food(String name){
		this.name= name;
	}
	public String getName(){
		return this.name;
	}
}

 


 

  • enum이 제공하는 메소드 (values()와 valueOf())

- 자바의 enum은 기본적으로 제공되는 메서드가 있다.

 

메서드 설명
toString() 해당 상수의 이름을 문자열로 반환한다.
name() 해당 상수의 이름을 문자열로 반환한다.
compareTo() 정렬의 기준을 위한 메서드이다.
비교 대상보다 순서가 빠르면 -1, 같으면 0, 느리면 1을 반환한다
정렬 순서는 상수가 선언된 순서가 디폴트로 지정되어 있다.
ordinal() 상수의 선언 순서에 따른 인덱스 (Zero based) 값을 반환한다.
Enum 안에는 private final int ordinal; 이 정의되어 있고 이를 사용한다.
values() 선언된 모든 Enum 값을 순서대로 배열에 담아서 반환한다.
valueOf() 인자로 받은 이름과 같은 Enum 값으로 반환한다.

 

 

  • values()

- 열거형의 모든 상수를 배열에 담아 반환한다.

 

Direction[] arr = Direction.values();

 

 

  • valueOf()

- 열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있게 해준다.

 

Direction dirction = Direction.valueOf("SOUTH");
  Direction.SOUTH == Direction.valueOf("SOUTH"); // true를 반환한다.

 


 

 

  • java.lang.Enum

- Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스로 Enum 클래스에는 열거체를 조작하기 위한 다양한 메소드가 존재한다.

- 대표적인 Enum 클래스의 메소드는 다음과 같다.

 

메서드 설명
static E values() 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다.
static E valueOf(String name) 전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다.
protected void finalize() 해당 Enum 클래스가 final 메서드를 가질 수 없는 상태를 말한다.
String name() 해당 열거체 상수의 이름을 반환한다.
int ordinal() 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환한다.

 

 


 

 

  • EnumSet

- 자바의 EnumSet은 Set 인터페이스를 기반으로 하면서 Enum 클래스의 상수로 구현된 것이다.

- 여기서 Set 인터페이스란 데이터를 중복으로 저장할 수 없고 순서가 보장되지 않는 자료구조를 말한다.

- 모든 요소는 단일 열거형 타입이여야 한며 null은 허용되지 않는다.

 

메서드 설명
copyOf(EnumSet s) 매개변수로 들어온 EnumSet을 복사한다.
nonOf(Class elementType) 빈 EnumSet을 반환한다.
of(E e1, E e2) 열거형 상수 2개를 입력받아 새로운 EnumSet에 넣어 반환한다.
complementOf(EnumSet s) 매개변수에 들어온 EnumSet의 열거형 상수들을 제외한 열거형 상수들을 새로운 EnumSet에 넣어 반환한다.
range(E from, E to) 인자로 받은 열거형 상수 사이의 범위를 인덱스의 순서대로 새로운 EnumSet에 넣어 반환한다. 단 앞선 매개변수의 인덱스가 빠르면 런타임에 에러가 발생한다.
동기식으로 사용할 필요가 있으면 Collections.synchronizedSet을 사용한다.  

 

 

 

 

 

'Study > Java_study' 카테고리의 다른 글

Java_study_13 (I/O)  (0) 2021.09.20
Java_study_12 (애노테이션)  (0) 2021.09.14
Java_study_10 (멀티쓰레드 프로그래밍)  (0) 2021.08.30
Java_study_9 (예외처리)  (0) 2021.08.23
Java_study_8 (인터페이스)  (0) 2021.08.17