상세 컨텐츠

본문 제목

JAVA 7-3. 참조타입 : 열거타입

Backend/JAVA-자바

by 사랑짱 2021. 6. 10. 17:14

본문

 

◆ 열거타입(Enumeration Type)이란?

- 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입

- 몇 가지로 제한된 상수를 가지는 타입 (Ex. Week 등)

 

※ 열거 상수란? 

- 열거 상수를 선언하면 열거 상수 자체가 객체로 생성된다!!

- 열거 타입 선언 때 주어지는 한정된 값, 즉 상수로 <타입. 상수> 형태로 사용

   Ex. Week 열거 타입의 상수 MONDAY는 Week.MONDAY로 사용

- 열거 상수는 모두 대문자로 작성

 

열거타입의 예

 

◆ 열거타입 선언

- public enum 키워드는 열거 타입을 선언하기 위한 키워드(소문자로 작성)

- 열거 타입 이름은 소스파일 이름과 대소문자가 모두 일치해야 한다.

- 열거 타입의 이름 선정하고 해당 이름으로 소스 파일(.java)을 생성

   (이때, 열거 타입의 이름은 관계적으로 첫 글자는 대문자, 나머지는 소문자)

 

 

◆ 열거타입 변수

- 열거 타입도 하나의 타입이므로 변수를 선언하고 사용해야 한다.

- 열거 타입은  null 값을 저장할 수 있다. (왜? 참조 타입이니까!)

열거타입 변수;  // 열거타입 변수 선언
열거타입 변수 = 열거타입.열거상수;  //열거 상수 저장

 

 

 열거타입의 객체 "열거상수"

열거 상수는 힙영역에 열거 객체로 생성되며

메소드 영역에 생성된 열거 상수 주소값을 통해 해당 열거 객체를 각각 참조할 수 있다.

 

열거 상수를 제외한 열거 타입의 변수는 스택 영역에 생성된다. 

그렇다면 열거 타입의 변수는 어떻게 객체가 생성될까?

열거 타입의 변수는 스택 영역에 생성되기 때문에 열거 상수의 객체를 참조하게 된다. 

 

<참고> 열거상수가 객체라면 객체생성은 어떻게 이루어지는걸까?

열거상수는 열거타입의 생성자를 호출한다.
다시 말해, 각각의 열거상수가 매개변수 없는 기본생성자를 호출하여 열거상수가 객체화되는 것이다. 

(+) 필드랑 메소드 선언도 가능한가?
- Yes!!!  열거상수 역시 필드와 메소드를 가질 수 있다.
   그 필드와 메소드는 각 열거상수가 생성될 때 생성되기 때문에 열거상수에 소속된 필드와 메소드가 된다.

  But, 열거상수에 필드와 메소드를 넣어사용하는 경우는 흔치 않다는 것!!
       객체의 특성을 가지고 있다는 것만 기억하자!

 

 

관련글 더보기