7월 30일 모각소 공부내용이다.
1. Enum
Enum을 사용하는이유는 잘못된 값을 사용함으로써 발생하는 에러 및 위험을 방지하기 위해서이다.
예를 들어 메뉴에
아메리카노,
아이스 아메리카노,
카페라떼,
가 있다고 가정하자.
하지만 손님이 초코라떼를 주문하면 에러가 발생할 수 있다.
Enum을 이용하면 이러한 주문을 사전에 차단할 수 있다.
즉 주문메뉴의 범위를 제한할 수 있다.
다음 코드를 살펴보자.
public class Sample {
enum CoffeeType {
AMERICANO,
ICE_AMERICANO,
CAFE_LATTE
};
public static void main(String[] args) {
System.out.println(CoffeeType.AMERICANO); // AMERICANO 출력
System.out.println(CoffeeType.ICE_AMERICANO); // ICE_AMERICANO 출력
System.out.println(CoffeeType.CAFE_LATTE); // CAFE_LATTE 출력
}
}
다음과 같은 반복문에서도 사용할 수 있다.
public class Sample {
enum CoffeeType {
AMERICANO,
ICE_AMERICANO,
CAFE_LATTE
};
public static void main(String[] args) {
for(CoffeeType type: CoffeeType.values()) {
System.out.println(type); // 순서대로 AMERICANO, ICE_AMERICANO, CAFE_LATTE 출력
}
}
}
해당 ENUM을 스프링 부트에서 사용해보자.
package com.jerry.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
//ORM -> Java(다른언어) Object -> 테이블로 매핑해주는 기술
@Entity // User 클래스가 MySQL에 테이블 생성
// @DynamicInsert // insert 시에 null인 필드를 제외시켜줌
public class User {
@Id //Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다.
private int id; // 시퀀스, auto_increment
@Column(nullable = false, length = 30, unique = true)
private String username;
@Column(nullable = false, length = 100) // 123456 =>해쉬(비밀번호 암호화)
private String password;
@Column(nullable = false, length = 50)
private String email;
//@ColumnDefault("'user'")
//DB는 RoleType이라는 것이 없다
@Enumerated(EnumType.STRING)
private RoleType role; // Enum을 쓰는게 좋다. // ADMIN, USER
@CreationTimestamp // 시간이 자동 입력
private Timestamp createDate;
}
여기를 보면 RoleType이라는 것이 있다.
RoleType라는 자료형은 실제로 없기에 새로 만들어 주어야 하는데,
바로 사용자가 admin인지 user인지 판별하기 위해서이다.
이를 판별하기 위해서 String 자료형을 사용할 수도 있겠지만, String 자료형을 사용하면 ADMINNNNNN이라던가, USERRRRRR같은 문자열에 대해서 처리방식이 까다롭기 때문에 Enum을 사용하였다.
다음과같이 src/main/java 파일에서 com.jerry.blog라는 패키지를 만들고 그 밑으로 model이라는 패키지를 만들고, user클래스를 만들었다. 그리고 그위에 RoleType이라는 enum파일을 만들었다. 나머지 클래스들과 패키지는 뒤에서 설명하겠다.
Enum코드는 다음과 같이 작성하였다
package com.jerry.blog.model;
public enum RoleType {
USER, ADMIN
}
자료형 enum을 사용하였고, RoleType을 만들어 USER와 ADMIN이 아닌 다른 값이 들어지 못하도록 설정하였다.
'[JAVA] 기본 문법' 카테고리의 다른 글
[JAVA] 제네릭 프로그래밍 (0) | 2023.02.07 |
---|---|
[JAVA] 자바 스트림 (0) | 2023.02.06 |
[JAVA] 어노테이션 (0) | 2022.08.06 |
[JAVA] 생성자 (0) | 2022.07.29 |
[JAVA] 정적 변수와 메소드 (0) | 2022.07.24 |
[JAVA] 접근 제어자 (0) | 2022.07.24 |
[JAVA] 자료형-문자열 (0) | 2022.07.17 |
[JAVA] 자료형-숫자 (0) | 2022.07.17 |