JAVA _기초

[JAVA] 자바의 Enum, 열거형 이란

Journey Jeong 2023. 2. 17. 20:31

01. Enum 이란?

: "Enumeration"의 약자로, Enumeration은 "열거, 목록, 일람표"라는 뜻으로 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.

: 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이이며, 일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다. 

: Enum 은 상수 그룹 (Final 변수처럼, 바꿀 수없는 변수)를 나타내는 특수한 Class 이다. 

: 다만 interface 대신 Enum 키워드를 사용하고, 대문자를 사용하고, 쉼표로 구분해야 한다. 

 

 

<학원에서 얘기하는 Enum> 

- 데이터 중에는 몇가지로 한정된 값 나열 

- 열거 상수 (enumeration constant) 

- Stati Final 

- 열거타입. 열거상수 

- 확장자는 java 로 외형적인 것은 class 와 동일하다. 다만 키워드는 enum 

- 대문자로 구성해야 함 

- Enum 객체가 컴파일 될 때 Enum 을 상속하게 되어 있어서, Enum 의 메서드를 활용 할 수 있다. 

 

< 요일 Enum 생성하기 >

package enums;

public enum Week {
// 확장자는 .java 이다. 외형적인것은 클래스와 동일하다. 
	SUN,MON,TUE,WEN,THU,FRI,SAT;
	
	Week(){}
}

<요일  Enum 활용하기>

package enums;

public class EnumTest01 {

	public static void main(String[] args) {
		
		System.out.println(Math.PI); //3.141592653589793
		
		System.out.println(Week.MON); //MON 
		
		System.out.println(Week.MON.ordinal()); //1 index
		
		System.out.println(Week.MON.name()); //MON //문자열로 제공한다. 
		
		System.out.println(Week.MON.toString()); //MON 
	}

}

 

<요일 Enum을 통한 오늘 요일 출력하기> 

package enums;

public enum Week {
// 확장자는 .java 이다. 외형적인것은 클래스와 동일하다. 
	SUN("일요일"),
	MON("월요일"),
	TUE("화요일"),
	WEN("수요일"),
	THU("목요일"),
	FRI("금요일"),
	SAT("토요일");
	
	String KoName; // KoName 을 필드로 사용 

	Week(String koName) { // 생성자 만들기 
		this.KoName=koName;
	}
}
package enums;

import java.util.Calendar;

public class EnumTest02 {

	public static void main(String[] args) {
		
		// 열거 상수만 저장 가능
		//Week week1=Week.SUN;
		//Week week2=Week.SUN;
		//System.out.println(week1 == week2); //true 
		
//		Calendar cal=new Calendar(); // 날짜 표현 
		Calendar cal=Calendar.getInstance();
		//System.out.println(cal.get(Calendar.YEAR)); // 0->1 // 1->2023(연도)
		// 연도를 표현하는 cal.get이기에 그 안에 Calendar 을 넣음로 보기 쉽게함(상수 표현식) 
		// System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //6 --- SUN: 0, MON:1 --> FRI : 6
	
		Week today=null;
		int n= cal.get(Calendar.DAY_OF_WEEK); // 요일을 숫자로 가지고 옵니다. 
		switch(n) {
		case 1:// 일요일 
			today=Week.SUN; break;
		case 2:// 월요일 
			today=Week.MON; break;
		case 3:// 화요일 
			today=Week.TUE; break;
		case 4:// 수요일 
			today=Week.WEN; break;
		case 5:// 목요일 
			today=Week.THU; break;
		case 6:// 금요일 
			today=Week.FRI; break;
		case 7:// 토요일 
			today=Week.SAT; break;
		}
		
		System.out.println("오늘은 "+ today + "day 입니다. "); // 영어로 
		System.out.println("오늘은 "+ today.name()+ " 입니다. "); //영어로  
		System.out.println("오늘은 "+ today.KoName + " 입니다. "); //한국어로 출력
		System.out.println("오늘은 "+ today.ordinal() + " 입니다. "); //숫자로
		System.out.println(cal.get(Calendar.MONTH)); //1 
		

	}

 

< 달력 만들기 >

package enums;

import java.util.Calendar;

public class Ex {

	public static void main(String[] args) {
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, 1); // 오늘 날짜 셋팅 
		

		
		System.out.println("요일 정보 : " + cal.get(Calendar.DAY_OF_WEEK)); // 1부터 
		System.out.println("오늘 날짜 : " + cal.get(Calendar.DAY_OF_MONTH)); // 1부터
		//System.out.println("오늘 날짜 : " + cal.get(Calendar.DATE)); // 1부터
		System.out.println("이번달 마지막 날짜 : " + cal.getActualMaximum(Calendar.DAY_OF_MONTH)); // 28
		
		Week[] w= Week.values();
		for(int i=0; i< w.length ; i++) {
			System.out.printf("%3s ", w[i]);
		}
		System.out.println();
		
		// 2월 1일의 요일 확인
		for(int i= 1; i< cal.get(Calendar.DAY_OF_WEEK); i++) {
			System.out.print("    ");
		}
		
		int lastDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		for(int i=1; i<=lastDay ; i++) {
			cal.set(Calendar.DAY_OF_WEEK,i);
			int n=cal.get(Calendar.DAY_OF_WEEK);
			System.out.printf("%3d ", i); //1~28까지 나옴 
			
			if(n==4)System.out.println();
		}
		
	}

 

** Calendr 클래스

(1) 개념: 날짜와 시간을 객체모델링화한 클래스, 시스템으로부터 시간 정보를 얻기에 getlnstance() 클래스 메서드 이용 

- ex) Calendar.getlnstance();

(2) 종류(상수) 

      - YEAR : 년도
      - MONTH : 월
      - DATE : 해당 월의 날짜
      - WEEK_OF_YEAR : 해당 년도의 몇 째주
      - WEEK_OF_MONTH : 해당 월의 몇 째주
      - DAY_OF_MONTH : DATE와 동일
      - DAY_OF_YEAR : 해당 년도의 날짜
      - DAY_OF_WEEK : 월, 화, 수...
      - HOUR : 시간(12시간제)
      - HOUR_OF_DAY : 시간(24시간제)
      - MINUTE : 분
      - SECOND : 초

 

이외 정보 아래 블로그 참고

https://whitewing4139.tistory.com/248

 

[Java Basic] 40 - 열거형(enum) 개요와 사용법

Java에서 날짜와 시간을 다루는 클래스 중 Calendar라는 클래스가 java.util 패키지 내에 존재한다. Calendar 클래스는 특정 날짜의 연도, 월, 일, 시, 분, 초 등을 필드값으로 지정하고 있다. Calendar는 get

whitewing4139.tistory.com