프로그래밍 언어/Java

enum이란? - 기본 (JAVA)

제이온 (Jayon) 2020. 12. 17.

안녕하세요? 코딩중독입니다.

 

오늘은 열거 타입에 대해서 알아보도록 하겠습니다.

 

 

열거 타입이란?

데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있습니다. 가령, 요일에 대한 데이터는 월요일~일요일까지 총 일곱 개의 값만 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 네 개의 값만 갖습니다. 이와 같이 한정된 값만을 갖는 데이터 타입을 바로 열거 타입이라고 합니다.

 

 

열거 타입 및 열거 타입 변수 선언

열거 타입은 아래 소스코드와 같이 간단히 표현할 수 있습니다. 저는 요일을 예로 들어서 열거 타입을 만들어 보았습니다.

 

 

 

 

맨 앞에 접근 제한자를 적고, 그 다음에 class가 아닌 enum을 적고, 마지막으로 enum의 이름을 지어주면 됩니다. 그리고 중괄호 내의 원하는 한정된 데이터를 정의합니다.

 

 

여기까지 열거 타입 자체를 선언을 하였고, 이제 열거 타입 변수에 대해서 알아 봅시다.

 

열거 타입도 하나의 데이터 타입이므로 변수를 선언하고 사용해야하는데, 'Week today;'와 같이 변수를 선언하면 됩니다. 그리고 이 변수에 값을 넣어주려면, 'Week today = Week.SUNDAY;' 구문을 작성하면 됩니다. 또한, 열거 타입도 참조 타입이기때문에 당연히 null 값을 할당해 줄수도 있습니다.

 

 

열거 타입 활용

자바는 컴퓨터의 날짜 및 요일, 시간을 프로그램에서 사용할 수 있도록 하기 위해 Dte, Calendar, LocalDateTime 등의 클래스를 제공하는데, Calender를 이용해서 날짜와 시간을 얻어 보겠습니다. 그리고 난뒤, 열거 타입 변수 today에 Calender 열거 상수를 대입하여 오늘의 요일을 알아보는 코드를 작성해 보겠습니다.

 

 

 

 

먼저, 첫 줄에 Calender를 import해 주어야 합니다. 그리고 열거 타입 변수를 선언한 뒤, Calender 내장함수를 이용하여 week에 요일값을 얻어 옵니다. 여기서 요일값은 1 ~ 7 사이의 값으로, 일요일은 1이고, 토요일은 7입니다.

 

이후, switch문을 이용하여 오늘의 날짜에 맞춰서 today에 열거형 변수를 넣어주면 됩니다. 마지막으로, 오늘 날짜가 잘 저장되었는지 확인하기 위해서 출력문을 작성하는 것이 이 코드의 전부입니다.

 

 

 

 

제가 이 글을 쓸 당시 목요일이었기때문에 THURSDAY가 잘 나온다는 것을 알 수 있습니다.

 

 

열거 객체의 메소드

먼저, 열거 객체는 열거 상수를 의미합니다. MONDAY, TUESDAY, ... , SUNDAY가 모두 열거 상수이고, 이것은 열거 객체로 생성되기 때문입니다. 이제, 열거 객체의 메소드가 어떤 것이 있는지 알아봅시다.

 

 

리턴 타입 메소드 설명
String name() 열거 객체의 문자열을 리턴
int ordinal() 열거 객체의 순번(0부터 시작)을 리턴
int compareTo() 열거 객체를 비교해서 순번 차이를 리턴
열거 타입 valueOf(String name) 주어진 문자열의 열거 객체를 리턴
열거 배열 values() 모든 열거 객체들을 배열로 리턴

 

 

(1) name()

name() 메소드는 열거 객체가 가지고 있는 문자열을 리턴합니다. 이때, 리턴되는 문자열은 열거 타입을 정의할 때 사용한 상수 이름과 동일합니다.

 

 

 

 

여기서 name은 "SUNDAY" 값을 할당받게 됩니다.

 

 

(2) ordinal()

ordinal() 메소드는 전체 열거 객체 중 몇 번째 열거 객체인지 알려줍니다. 열거 객체의 순번은 열거 타입을 정의할 때 주어진 순번을 말하는데, 0번부터 시작합니다. 예를 들어 열거 타입 Week의 열거 객체 순번은 MONDAY가 0이고, TUESDAY가 1이고, ..., SUNDAY는 6이 됩니다.

 

 

(3) compareTo() 메소드

compareTo() 메소드는 매개값으로 주어진 열거 객체를 기준으로 전후 몇 번째 위치하는지 비교합니다. 예를 들어, Week 타입 변수 day1에는 Week.MONDAY를, Week 타입 변수 day에는 Week.WEDNESDAY를 할당한다고 해 봅시다. 이때, day1.compareTo(day2)를 호출하면 반환되는 값은 -2가 됩니다. 반대로, day2.compareTo(day1)를 호출하면 반환되는 값은 2가 됩니다.

 

 

(3) valueOf() 메소드

valueOf() 메소드는 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴합니다. 가령, Week 타입 변수 week에 Week.MONDAY를 통하여 값을 할당해 줄수도 있지만, Week.valueOf("MONDAY")을 통해 값을 할당해 줄수도 있습니다.

 

 

(4) values() 메소드

values() 메소드는 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴합니다. 여담으로, 이것은 리턴값이 리스트가 아니기때문에 stream api는 사용할 수 없습니다.

 

 

정리

지금까지 enum 기초를 알아보았습니다. 전반적인 enum의 개념과 선언 및 활용하는 방법은 모두 이해하셨을 것 같습니다.

 

다음 시간에는 enum을 좀 더 활용해 봅시다.

 

 

참고 서적

이것이 자바다. - 저자 신용권

댓글

추천 글