본문 바로가기

Java/Study

Ch5 - 열거타입

열거타입 (enumeration type)

p.171

"한정된 값만을 갖는 데이터 타입으로서 몇 개의 열거 상수 중에서 하나의 상수를 저장한다."

"열거 타입을 선언하기 위해서는 먼저 열거타입의 이름과 동일한 소스 파일(.java)를 생성해야 한다"

사실 하나의 소스파일안에서 선언해도 두 개의 실행파일(.class)이 저장되어 작동한다. 열거타입은 고정된 항목을 열거해서 빠르게 처리하고, 잘못된 데이터의 입력을 방지해준다.

 

 

열거타입선언

public enum Week {MONDAY,....,SUNDAY}

public enum이라는 키워드는 소문자 | 열거타입의 첫글자는 대문자 | 열거상수는 모두 대문자, 여러 단어라면 _로 연결 (ex.LOGIN_SUCCESS)

 

 

열거타입변수

열거상수는 단독으로 사용불가능하며, 반드시 열거타입.열거상수로 사용된다.

열거상수는 객체로서, MONDAY~SUNDAY까지의 열거상수는 총 7개의 Week객체로 생성된다.

그리고 메소드 영역에 생성된 열거상수가 해당 Week 객체를 각각 참조하게 된다.

열거타입 변수는 참조타입이기 때문에 null값을 저장할 수 있다.

 

 

열거상수 Week.SUNDAY와 참조변수 today는 같은 Week객체를 참조한다.

즉 today == Week.SUNDAY의 연산 결과는 true이다.

 

 

 

 

 

 

 

Calendar 클래스를 이용한 날짜와 시간을 얻는 법

1. Calendar now = Calendar.getInstance();

//Calendar 변수(임의의 변수,now)를 선언하고 Calendar.getInstance() 메소드가 리턴하는 Calendar 객체를 얻는다.

(Calendar 클래스 안의 getInstance 메소드가 힙메모리에 공간을 할당하는 과정을 포함하므로, Calendar 객체를 얻을 수 있다)

 

2.get()메소드 활용

열거객체의 메소드

열거 객체는 열거상수의 문자열을 내부 데이터로 가지고 있다.  또한 Enum클래스로부터 메소드를 상속받아 쓸 수 있다.

1. name()메소드

열거 객체의 문자열을 리턴.한다 여기서 리턴되는 문자열은 열거타입을 정의할 때 사용한 상수이름과 동일하다.

Week today = Week.SUNDAY;

String name = today.name(); →name에 "SUNDAY"를 저장한다. 

 

2. ordinal()메소드

전체 열거 객체 중 몇번째 열거 객체인지 알려준다. 0번부터 시작한다.

int ordinal = today.ordinal(); → 6

 

3. compareTo()메소드

열거객체를 비교해서 순번차이를 리턴한다.매개값이 열거 객체보다 순번이 빠르다면 음수, 느리다면 양수를 리턴한다.

Week day1 = Week.MONDAY;

Week day2 = Week.WEDNESDAY;

int result1 = day1.comapreTo(day2); →day2를 기준으로 day1이 얼마나 빠른지. -2를 리턴한다.

 

4. valueOf(String name) 메소드

주어진 문자열의 열거 객체를 리턴한다. 외부로부터 문자열을 입력받아 열거 객체로 변환할 때 유용하게 쓰인다.

Week weekDay = Week.valueOf("SATURDAY"); →weekDay 변수는 Week.SATURDAY 열거객체를 참조하게 된다.

 

5. values() 메소드

모든 열거 객체들을 배열로 리턴한다. 배열의 인덱스는 열거 객체의 순번과 같고, 각 인덱스 값은 해당 순번의 열거 객체 번지이다.

 

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

Ch6 클래스 - 정적 멤버와 Static  (0) 2021.03.04
Ch6 객체지향프로그래밍 - 메소드  (0) 2021.03.04
Ch6 객체지향프로그래밍 - 필드, 생성자  (0) 2021.03.02
Ch5 - 배열 2  (0) 2021.03.02
Ch5 - 배열 1  (0) 2021.02.27