본문 바로가기
국비 교육/백엔드(Java, Spring)

[자바] ENUM

by 육츠 2024. 2. 13.
Contents 접기

ENUM 이란

- 클래스처럼 보이게 하는 상수
- 서로 관련있는 상수들끼리 모아 상수들을 대표할 수 있는 이름으로 타입을 정의하는 것
- Enum 클래스 형을 기반으로 한 클래스형 선언 

 

STS4 에서 ENUM의 파일 위치

 

예제 1. season

; 은 넣어도 되고 안넣어도 되지만 기본 형태는 넣지 않은 형태이다.

public enum Season {
	SPRING, SUMMER, FALL, WINTER
}

 

public class SeasonTest {

	public static void main(String[] args) {
		Season data = Season.SPRING;
		System.out.println(data);
		
	}

}

SPRING 을 함수처럼 사용하여 SPRING이 출력 된다.

enum 클래스는 한 패키지에서 하나만 가능하다.

 

예제 2. color - 사용방법 2 번째

package color;

public enum MyColor {
	
	// 빨강 > RED O // RED > 빨강 X
	
	빨강("RED"), 주황("ORANGE"), 노랑("YELLOW"),
	초록("GREEN"), 파랑("BLUE"), 남색("DARKBLUE"), 
	보라("PURPLE");

	private String color;
	private MyColor(String color) {
		this.color = color;
	} //생성자처럼 생긴 것일뿐 생성자 아님
	
	public String getColor() {
		return color;
	}
	
}
코드 의미
private String color;
private MyColor(String color) {
    this.color = color;
생성자처럼 생긴 것일뿐 생성자로 사용되는 것이 아니다.

 

package color;

public class MyColorTest {

	public static void main(String[] args) {
		// 전체 데이터를 배열로 반환
		
		MyColor[] colors = MyColor.values();
		// enum 이 생기면 자동으로 만들어짐
		
		for(MyColor c : colors) System.out.println(c);
		
		System.out.println();
		
		MyColor c = MyColor.valueOf("빨강");
		// enum 데이터를 가ㅣ져옴
		System.out.println(c);
		System.out.println(c.getColor());
		
		System.out.println(MyColor.valueOf("노랑").getColor());
		System.out.println();
		
		
}

 

위치값을 반환

switch 문을 사용할때는 default 필요없다. (enum 문은 내가 설정해놓은 값 외에는 사용할 수 없기 때문이다.)

// 위치값 반환
		int index = MyColor.valueOf("빨강").ordinal();
		System.out.println("빨강의 인덱스: " + index);
		
		
		System.out.println();
		
		
		MyColor c2 = MyColor.valueOf("보라");
		switch(c2) {
		case 빨강: System.out.println("빨강 선택"); break;
		case 주황: System.out.println("주황 선택"); break;
		case 노랑: System.out.println("노랑 선택"); break;
		case 초록: System.out.println("초록 선택"); break;
		case 파랑: System.out.println("파랑 선택"); break;
		case 남색: System.out.println("남색 선택"); break;
		case 보라: System.out.println("보라 선택"); break;
		}
		
		
	}

 

JPA04 에서 적용

패키지 : package com.kdigital.jpa04.entity; 에 위치해 있는 Product.java 파일이다. 
@Enumerated(EnumType. [STRING | ORDINAL]) 두 가지 중 선택한다.

	@Enumerated(EnumType.STRING) // DB -> 봄 , 사용자 -> 봄 Converter 코드 불필요
	//@Enumerated(EnumType.ORDINAL)// DB -> 0 , 사용자 -> 봄 Converter 코드 필요
	private Season season;

 

패키지 : package com.kdigital.jpa04.service; 에서 만든 ProductServiceImpl  중 ENUM 을 사용한 부분이다.

    @Override
        public void insert() {
            String productName, s;

            int price;

            System.out.print("> 제품명: ");
            productName = keyin.nextLine();
            System.out.print("> 계절: ");
            s = keyin.nextLine();
            System.out.print("> 가격: ");
            price = keyin.nextInt();

            Season season = Season.valueOf(s);
            // 문자열을 enum으로 저장
            Product product = new Product(productName, season, price);

            EntityManager manager = ConnectionManager.getManager();
            EntityTransaction tx = manager.getTransaction();

            try {
                tx.begin();

                manager.persist(product);

                tx.commit();
                System.out.println("저장완료");
            }catch(Exception e) {
                tx.rollback();
            }finally {
                manager.close();
            }
        }