[Java] Enum

김하밍·2024년 3월 8일
0

Java

목록 보기
29/46

열거 타입(enumeration type)의 특성

  • 열거형은 연관된 값들을 저장합니다. (서로 연관된 상수들의 집합)
  • 그 값들이 변경되지 않도록 보장합니다.
  • 열거형 자체가 클래스이기 때문에 열거형 내부에 생성자, 필드, 메소드를 가질 수 있어서 단순히 상수가 아니라 더 많은 역할을 할 수 있습니다.

Enum 변수에 Enum 상수값 저장하기 예제

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
// 열거 타입 변수에 열거 타입에 정의된 상수 저장하기
Day today = Day.MONDAY;

Enum의 장점

상수가 어떠한 값을 갖게 하는 등의 더 많은 작업을 보다 더 적은 코드로 가능합니다.

Enum과 Class의 차이점

열거형에는 어떠한 데이터가 있는지 몰라도 하나씩 꺼내어 사용할 수 있는 메소드가 있습니다.


Enum 사용 방법

Calendar으로 오늘의 요일을 얻고 나서 Week 열거 타입 변수 today에 해당 열거 상수를 대입하는 예제

import java.util.Calendar;

public class Ex02_EnumWeekExample {
	public static void main(String[] args) {
		Ex01_Week today = null;		// 열거 타입 변수 선언
		
		Calendar cal = Calendar.getInstance();
		// Calendar 변수 선언, Caledndar.getInstance() 메소드로 Calendar 객체 생성
		int week = cal.get(Calendar.DAY_OF_WEEK);	// 일(1) ~ 토(7)까지의 숫자를 리턴
		
		switch(week) {
			case 1:
				today = Ex01_Week.SUNDAY; break;	// 열거 상수 대입
			case 2:
				today = Ex01_Week.MONDAY; break;
			case 3:
				today = Ex01_Week.TUESDAY; break;
			case 4:
				today = Ex01_Week.WEDNESDAY; break;
			case 5:
				today = Ex01_Week.THURSDAY; break;
			case 6:
				today = Ex01_Week.FRIDAY; break;
			case 7:
				today = Ex01_Week.SATURDAY; break;
		 } // switch
		
		System.out.println("오늘 요일 : " + today);
		
		if(today == Ex01_Week.SUNDAY) {
			System.out.println("일요일에는 축구를 합니다.");
		} else {
			System.out.println("열심히 자바 공부합니다.");
		} // if else
	} // main()
} // class


values() 메소드 활용 예제

: 열거된 모든 원소를 배열에 담아 순서대로 리턴

enum Fruit {
    // Fruit의 인스턴스 변수의 color가 red가 된다.
    APPLE("red"), PEACH("pink"), BANANA("yellow");
    // 사용자들이 변수를 변경하지 않도록 메서드로 얻을 수 있도록 한다.
    private String color;
    public String getColor() {
        return this.color;
    }
    Fruit(String color) {
        System.out.println("Call Constructor " + this);
        this.color = color;
        // this.color -> 전역
        // color -> 지역
    }
}
public static void main(String[] args) {
        for (Fruit f : Fruit.values()) {
            System.out.println(f);
        }
    }
/* 기대되는 출력값
* APPLE
* PEACH
* BANANA
*/
profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글