1.열거형 클래스 (enum class) 정의
요일: 월, 화, 수, 목, 금, 토, 일
달력: JAN, FEB, MAR, APR, MAY, JUNE ....
과 같이 서로 관련 있는 상수들을 모아놓고, 해당 상수들에 대해 정의한 클래스
*상수란?
열거형 클래스 안의 핵심이 되는 값을 이야기 하는 것이지, 꼭 숫자일 필요 없다. 정수, 실수, 문자열 모두 가능하다.
위의 예를 해당 정의에 따라 나누어보면,
클래스 이름: 요일 / 상수: 월, 화, 수, 목, 금, 토, 일
클래스 이름: 달력/ 상수: JAN, FEB, MAR, APR, MAY, JUNE ....
이다.
2. 문법적 특징
1. 열거된 상수들은 차례대로 0부터 시작하는 index를 가진다.
2. 상수들은 모두 대문자로 적어야한다.
3. 상수와 특정 값들을 연결시키지 않은 경우에는, 상수 선언 후 세미콜론(;)을 붙이지 않는다.
enum Day {
MON,TUE,WEN,TUR,FRI,SAT,SUN
}
4. 상수와 특정 값들을 연결시키는 경우에는 상수 선언 후 세미콜론(;)을 붙인다.
enum Day {
//요일의 상수(영어표기)과 특정 값(한글표기)을 연결 시키는 것
MON("월"),TUE("화"),WED("수"),TUR("목"),FRI("금"),SAT("토"),SUN("일");
//상수의 인스턴스 변수 -> 상수 하나 하나 작은 객체라고 생각하는 것이 편하다.
private final String KOR;
//인스턴스 변수에 값을 넣는 생성자
Day(String name) {
this.KOR = name;
}
//상수들의 한글표기라는 변수를 반환하는 매소드
public String getKOR(){
return KOR;
}
}
3. 열거형 선언
(1) 열거형 클래스 선언
//클래스 외부
enum 클래스이름 {
상수1, 상수2, 상수3, ...
}
//클래스 내부
public class Test {
public enum 클래스 이름 {
상수1, 상수2, 상수3, ...
}
}
(2) 열거형 클래스 사용법 (상수를 변수에 넣기 )
//어떤 클래스의 내부
열거형 클래스 이름 변수 이름 = 클래스이름. 변수에 넣고 싶은 상수;
//위의 Day 열거형 클래스를 이용한다고 치면
Day day1 = Day.MON;
*예시
//변수안에 상수 집어넣기
Resolution resolution = Resolution.FHD;
System.out.println(resolution); // FHD가 찍힌다.
System.out.println("동영상 녹화 품질 : ");
//switch-case 문 이용
switch (resolution) {
// resolution == HD 이면
case HD:
System.out.println("일반화질");
break;
case FHD:
System.out.println("고화질");
break;
case UHD:
System.out.println("초고화질");
break;
}
4. 열거형 매소드
열거형 클래스가 기본적으로 사용할 수 있는 매소드들이 있다. 우리는 거기서 가장 많이 쓰이는 것만 알아보자.
앞에 적힌 ClassName은 예시이다. 이 곳에는 자신이 매소드를 쓰려고 하는 열거형 클래스의 이름을 쓰면 된다.
(1) ClassName.valueOf( String arg )
()안의 문자열과 같은 값의 상수를 반환. 없으면 Exception이 발생한다.
*예시
enum Resolution {
HD,FHD,UHD
}
public class Enum_Ex{
//UHD와 같은 상수 찾아서 가져온 뒤 resolution이란 변수에 저장
Resolution resolution = Resolution.valueOf("UHD");
}
** 심화
ClassName.valueOf(Class<T> class, String arg)
넘겨받은 class 에서 해당 String을 찾아 그것과 같은 값을 enum 속 상수를 찾아 반환
(2) ClassName.values()
enum 클래스 내의 상수를 차례대로 반환
(3) 상수.name()
호출된 상수를 String 으로 반환
(4) 상수.ordinal()
호출된 상수의 index를 반환
**예시
//선언
enum Day {MON,TUE,WED,TUR,FRI,SAT,SUN}
public class enum_EX {
//for-each 구문 > 열거형 클래스를 순회
// today라는 Day형 변수에 Day의 상수들을 차례대로 대입
// 현재 대입된 상수의 이름, index를 출력
for (Day today : Day.values()){
System.out,println("오늘의 요일은 : " + today.name() + "이고 요일의 순서는 " + today.ordinal());
}
}
5. 변수, 생성자, 매소드를 이용해 상수와 특정 값 연결시키기
먼저 각 상수에 대해 넣을 값을 상수 옆의 ()안에 넣어줘야 한다.
enum 클래스 내의 변수를 통해서 각 상수에 대한 정보를 기술할 수 있다.
enum 클래스의 생성자는 상수와 변수를 이어준다.
enum 클래스의 Getter 매소드는 상수의 변수 값을 반환해서 무엇이 들어있는지 보여준다.
*예시
enum Day {
//요일의 상수(영어표기)과 특정 값(한글표기)을 연결 시키는 것
MON("월"),TUE("화"),WED("수"),TUR("목"),FRI("금"),SAT("토"),SUN("일");
//상수의 인스턴스 변수
private final String KOR;
//인스턴스 변수에 값을 넣는 생성자
Day(String name) {
this.KOR = name;
}
//상수들의 한글표기라는 변수를 반환하는 매소드
public String getKOR(){
return KOR;
}
}
**변수가 2개 이상일 때의 예시
//선언 - 각 상수에 넣을 값도 같이!
enum Direction {
EAST(1, "<"), WEST(2, ">"), NORTH(3, "^"), SOUTH(4,"V")
private final int index;
private final String symbol;
Direction(int first_One, String secoend_One)
{
this.index = first_One;
this.symbol = secoend_One;
}
// this.이 필요없다. 매소드 호출 시 상수이름.Getter매소드()라서 무슨 상수인지 특정해진다.
public int getIndex(){
return index;
}
public String getSymbol(){
return symbol;
}
}
//하나씩 값들이 잘 들어있나 호출
public class enum_EX {
for(Direction D : Direction.values()) {
System.out.println(Direction.name() + " : " + Direction.getindex()
+ " : " + Direction.getSymbol());
}
}
4.점검
(1) 열거형이란? / 상수란?
(2) 열거형 문법적 특징(4가지)
(3) 열거형 클래스 선언 / 열거형 자료형 변수 안에 상수 값 집어 넣기
(4) 열거형 클래스의 매소드 각각 뜻 ClassName.valueOf(), ClassName.values(), 상수.name(), 상수.ordinal()
(5)인스턴스 변수, 생성자, 매소드를 이용해 상수와 특정 값 연결시키기 > 코드 보고 이해만 하자
'Language > Java' 카테고리의 다른 글
[JAVA] Interface (인터페이스) (0) | 2023.02.02 |
---|---|
[JAVA] 추상화와 추상화 클래스 (0) | 2023.02.01 |
[JAVA]final (0) | 2023.01.29 |
Chap07_13 참조(reference) (0) | 2023.01.29 |
[JAVA] Super (0) | 2023.01.28 |