본문 바로가기
Challenge

11주차 과제: Enum

by Daisy :) 2021. 1. 29.
반응형

Enum (열거형)

여러 상수를 선언해야 할 때, 편리하게 선언할 수 있는 방법으로, 열거형(enumerated type)이라고 부릅니다.

열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.  

 

열거 타입의 장점

  1. 문자열과 비교해 IDE의 지원을 받을 수 있다. (자동완성, 오타 검증, 텍스트 리팩토링)

  2. 허용 가능한 값들을 제한

  3. 리팩토링 시 변경 범위가 최소화 된다. (내용 추가가 필요해도 Enum 코드 외에 수정할 필요가 없다.)

enum 정의하는 방법

enum 열거형이름 { 상수명1, 상수명2, ...}

예를 들어 이동수단을 상수로 정의하는 열거형 Transportation 은 아래와 같습니다.

enum Transportation { CAR, BUS, TRAIN, AIRPLAIN }

이 열거형에 정의된 상수를 사용하는 방법은 '열거형이름.상수명'입니다. Transportation. CAR;

 

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

* values() 메서드

  values() 메서드는 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환합니다.

  이 메서드는 자바의 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드입니다.

 

* valueOf() 메서드

  valueOf() 메서드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환합니다.

 

* ordinal() 메서드 

 모든 열거형의 조상인 java.lang.Enum클래스에 정의된 것으로, 열거형 상수가 정의된 순서(0부터 시작)를 정수로 반환합니다. 

 

java.lang.Enum

모든 열거형의 조상은 java.lang.Enum 입니다.

Enum클래스에는 아래와 같은 메서드가 정의되어 있습니다.

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

EnumSet

enum 유형에 사용하기위한 특수 Set 구현입니다.  AbstractSet 클래스를 상속하고 Set 인터페이스를 구현합니다.

 

import java.util.EnumSet;
import java.util.Iterator;

enum Transportation { CAR, BUS, TRAIN, AIRPLAIN }

public class EnumSetDemo {
	
	public static void main(String[] args) {
		
		EnumSet<Transportation> set = EnumSet.of(Transportation.CAR , Transportation.BUS);
		
		Iterator<Transportation> iter = set.iterator();  
		
	    while (iter.hasNext())  
	      System.out.println(iter.next());  

	}

}

 

 

 

 

 

 

<reference>

https://itmining.tistory.com/149 [IT 마이닝]

opentutorials.org/course/2517/14151[ 열거형(enum) ]

www.tcpschool.com/java/java_api_enum

자바의 정석 저자 남궁 성

sodocumentation.net/ko/java/topic/10159/enumset-%ED%81%B4%EB%9E%98%EC%8A%A4

 

반응형

'Challenge' 카테고리의 다른 글

210315 #1:)  (0) 2021.03.26
12주차 과제: 애노테이션 #12  (0) 2021.02.12
10주차 과제: 멀티쓰레드 프로그래밍  (0) 2021.01.23
9주차 과제: 예외 처리  (0) 2021.01.15
8주자 과제: 인터페이스  (0) 2021.01.08

댓글