열거타입 (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 |