열거 타입, 열거 상수란? | 열거타입(enum) 변수 | enum, enumeration type

2021. 7. 3. 15:46·JAVA

알고리즘 공부하다가 enum이라는 타입과 다시 만났다. 내가 작년 7월 5일에 학습했던 타입이다. 거의 1년 전에 한번 슥 보고 지나갔더니 잊어서 다시 공부한다. 1년간 크게 발전하지 못했음을 반성하며 학습에 들어간다. 

 


열거 타입(enum): 

 

한정된 값만을 갖는 타입이다. 예를 들어 보자.

아래 사진에서 열거타입(enum)인 Week는 한정된 7개의 값(MONDAY...SUNDAY)만을 가진다.

 

열거 타입 예시

 

한정된 7개의 값(MONDAY...SUNDAY)은 '열거 상수'라고 한다.  

한정된 열거 상수 중 하나의 상수를 저장하는 타입이 바로 enum 즉 열거타입이다. 

 

▶ 이름짓기 관례

- 열거타입 이름은 관례적으로 첫 글자를 대문자로 (예시에서는 Week)

- 열거 상수는 관례적으로 모두 대문자로 작성 (MONDAY...SUNDAY)

- 열거 상수가 여러 단어로 구성된다면 _로 연결 (THIS_WAY 이런식으로)

 

 

 

 

enum 변수 만들기:

 

위와 같이 Week라는 열거타입을 선언해보았다. 

그렇다면 이제는 타입이 Week인 변수를 만들 수 있다. 

 

[열거타입 Week를 갖는 변수를 선언]

Week today;
Week reservationDay;

 

위 enum타입 변수에는 '열거 상수'를 저장할 수 있다. 아까 열거타입이란 한정된 값만 가지는 타입이라고 했다. 즉, 열거 타입 변수는 미리 선언된 값인 열거상수만 값으로 가질 수 있다.

 

[열거타입(enum) 변수는 열거상수를 값으로 가짐]

Week today = Week.SUNDAY;
Week birthday = null;

ㄴ참고로, 열거타입은 참조타입이므로 null이 될 수도 있다.

 

 

 

 

메모리구조와 함께 이해하기:

 

  열거타입은 참조타입이다. 그리고 각각의 열거 상수는 각각의 객체로서 존재한다. 위의 Week 예시에서 MONDAY...SUNDAY라는 7개 열거 상수는 '힙 영역'에 7개의 Week객체로 생성된다. 그리고는 '메소드 영역'에 있는 7개의 각 '열거 상수'들이 힙 영역의 7개 Week객체를 각각 참조하게 되는 것이다.

 

Week today = Week.SUNDAY;를 이해해보자.

- Week이라는 열거타입의 변수 today를 선언하면 '스택 영역'에 변수 today가 생성된다.

- 메소드 영역에 있는 SUNDAY라는 열거상수는, 힙영역에있는 열거객체 Week를 참조한다. 

- 변수 today가 Week.SUNDAY를 참조한다는 것은, 열거상수 SUNDAY가 참조하는 Week객체를 참조한다는 것이다. 

 

즉, 열거상수가 같으면 참조하는 열거객체가 같다. 예를 들어서,

Week week1 = Week.SATURDAY;

Week week2 = Week.SATURDAY;

System.out.println(week1==week2); //true다.

열거상수가 Week.SATURDAY로 같으므로, 변수 week1과 week2가 참조하는 열거 객체가 같다는 말이다. 

 

(다음 사진은 '혼자 공부하는 자바'책의 207페이지에서 가져온 도해다. 자발적인 책 홍보를 살짝 하겠다. 혼공자는 이런 도해가 깔끔해서 메모리 영역을 공부할 때 많은 도움이 되었다. 입문책으로 딱이다. 추천한다.)

 

 

 

 

열거타입의 활용 예시:

 

아까 만든 열거타입 Week는 MONDAY...SUNDAY의 7개의 열거 상수를 값으로 한다. 즉, Week타입은 7개의 요일 값을 가질 수 있다.

 

자바는 java.util.Calendar클래스를 지원하여 각종 날짜(년,월,일), 요일, 시간에 대한 정보를 얻을 수 있게 해준다. 

이러한 Calendar 클래스를 통해 오늘의 요일을 얻고, Week타입 변수에다가 오늘 요일과 일치하는 열거상수를 부여해줄 수 있다.  

 

Week열거타입 변수 today가 열거상수 MONDAY~SUNDAY 중 어떤 값을 참조하게 하는 다음 코드를 보면 이해될 것이다.

 

import java.util.Calendar;
import sec03.Week;  //enum을 선언한 위치를 import

public class EnumWeekExample {
    public static void main(String[] args) {
        Week today = null;

        Calendar cal = Calendar.getInstance();
        int week = cal.get(Calendar.DAY_OF_WEEK);  //일요일(1)~토요일(7)숫자를 리턴

        switch(week) {
        case 1:
            today = Week.SUNDAY; break;
        case 2:
            today = Week.MONDAY: break;
        .
        .
        .
        case 7:
            today = Week.SATURDAY; break;
        }
        System.out.println("오늘 요일: " + today);
    }
}

 

반응형

'JAVA' 카테고리의 다른 글

JAVA 코테 | Scanner, println → BufferedReader/Writer | 시간초과로 입출력 변경  (0) 2022.03.28
실전 Java 소프트웨어 개발 | 입출금 내역 분석기 실습하기  (0) 2022.03.26
클래스의 정렬(대소판정)기준 | comparable, compareTo, comparator, compare | 자연정렬(natural ordering)  (0) 2021.06.28
[Java] String.format() | 문자열 형식 지정하기 | %%%ds가 뭘까? | %%  (1) 2021.06.24
Spring 학습 1일차 - 자바 웹 개발 첫경험을 위해  (0) 2021.02.07
'JAVA' 카테고리의 다른 글
  • JAVA 코테 | Scanner, println → BufferedReader/Writer | 시간초과로 입출력 변경
  • 실전 Java 소프트웨어 개발 | 입출금 내역 분석기 실습하기
  • 클래스의 정렬(대소판정)기준 | comparable, compareTo, comparator, compare | 자연정렬(natural ordering)
  • [Java] String.format() | 문자열 형식 지정하기 | %%%ds가 뭘까? | %%
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (389)
      • 미분류글 (32)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
열거 타입, 열거 상수란? | 열거타입(enum) 변수 | enum, enumeration type
상단으로

티스토리툴바