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();
}
}
'국비 교육 > 백엔드(Java, Spring)' 카테고리의 다른 글
[스프링] 게시판 구현 - 1 (게시글 목록 요청) (0) | 2024.03.18 |
---|---|
[스프링] 서버 전달 (0) | 2024.03.17 |
[자바] 입출력 I/O 와 Stream (0) | 2024.01.30 |
[자바] LocalDate, Calendar, Anonymous (0) | 2024.01.30 |