본문 바로가기
spring/spring jpa

[JPA] Entity에 Enum 사용하기

by moonsiri 2024. 4. 25.
728x90
반응형

JPA Entity에서 Enum 사용하는 이유

  1. 코드 가독성
    • Enum을 사용하면 코드의 가독성이 높아집니다. Enum은 코드에서 명시적으로 정의된 상수 집합이므로 해당 값을 사용하는 곳에서는 해당 의미를 명확하게 이해할 수 있습니다.
  2. 안전성
    • Enum을 사용하면 오타나 잘못된 값으로 인한 오류를 방지할 수 있습니다. 컴파일러는 Enum 값의 유효성을 검사하므로 잘못된 값이 사용되는 경우 컴파일 오류가 발생합니다.
  3. 유지보수성
    • 코드에서 Enum 값을 수정할 때 해당 Enum을 사용하는 모든 곳을 찾아 수정할 필요가 없습니다. Enum 값만 수정하면 되므로 유지보수가 쉽습니다.
  4. 타입 안정성
    • Enum을 사용하면 타입 안정성이 보장됩니다. Enum 값은 해당 Enum 타입으로만 제한되므로 다른 타입의 값을 실수로 사용하는 문제를 방지할 수 있습니다.
  5. 데이터베이스와의 상호 변환
    • JPA에서 Enum을 사용하면 Enum 값과 데이터베이스에 저장되는 값 간의 변환을 쉽게 처리할 수 있습니다. EnumType을 설정하여 Enum 값을 문자열 또는 숫자로 저장하고 조회할 수 있습니다. 이를 통해 데이터베이스에 저장된 값을 응용 프로그램에서 Enum으로 사용할 수 있습니다.

 

 

JPA Entity에서 Enum을 사용하는 방법

1. Enum 정의

먼저 Enum을 정의합니다.

public enum UserType {
    ADMIN,
    USER,
    GUEST
}

 

2. Entity에 Enum 속성 추가

Enum을 사용할 속성을 Entity 클래스에 추가합니다.

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.STRING) // Enum 값을 문자열로 저장
    @Column(name = "user_type")
    private UserType userType;

    // 다른 필드들
    // 생성자, 게터/세터 등
}

 

3. Enum 값을 저장 및 조회

EnumType.STRING으로 설정하면 Enum의 값을 문자열로 저장합니다. 따라서 데이터베이스에는 Enum의 문자열 값이 저장됩니다.

@Service
public class UserService {

    @Resource
    private UserRepository userRepository;

    @Transactional
    public void saveUser() {
        User user = new User();
        user.setUserType(UserType.USER); // Enum 값 설정
        userRepository.save(user);
    }

    public UserType getUserType(Long userId) {
        Optional<User> optionalUser = userRepository.findById(userId);
        if (optionalUser.isPresent()) {
            User user = optionalUser.get();
            return user.getUserType();
        } else {
            throw new EntityNotFoundException("User not found with id: " + userId);
        }
    }
}

 

728x90
반응형

댓글