@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto increment
private Long id = null;
@Getter
@Column(nullable = false)
private String name;
}
Long 타입 vs long 타입
- Long (Wrapper 클래스):
- Long은 long 기본형 타입의 래퍼(Wrapper) 클래스입다.
- 객체이므로 null 값을 가질 수 있다 .
- Long 객체는 힙(Heap) 메모리에 저장된다.
- 컬렉션(Collections)이나 제네릭(Generics)을 사용할 때 필요하다.
- Long 클래스는 hashCode(), equals() 등의 메서드를 사용할 수 있다.
- long (Primitive 타입):
- long은 Java의 기본형(Primitive) 데이터 타입 중 하나로, 64비트 정수를 나타낸다.
- null 값을 가질 수 없으며, 기본값은 0L이다.
- 스택(Stack) 메모리에 저장되어 Long 객체보다 접근 속도가 빠르다.
- 산술 연산에서 Long 객체보다 성능이 좋다.
id 필드에 Long 타입을 사용하는 이유
- null 값 허용: 데이터베이스에 저장되기 전에는 id 값을 알 수 없으므로, 초기값을 null로 설정하여 "값이 없음"을 표현할 수 있습니다. long 타입은 null을 가질 수 없기 때문에 Long을 사용한다.
- JPA의 요구사항: JPA는 Entity의 id 필드가 객체 타입이기를 요구할 수 있다.
id 필드의 초기값을 null로 설정하는 이유
- 자동 생성 값: @GeneratedValue(strategy = GenerationType.IDENTITY) 어노테이션은 데이터베이스에서 id 값을 자동으로 생성하도록 지시한다.
- 생성 시점: Entity가 처음 생성될 때는 데이터베이스에 저장되기 전이므로 id 값이 없다. 따라서 초기값을 null로 설정하여 "아직 결정되지 않은 값"임을 나타낸.
요약
Entity 클래스의 id 필드를 Long 타입으로 설정하고 초기값을 null로 지정하는 것은 JPA의 자동 키 생성 전략과 "값이 아직 할당되지 않았음"을 나타내기 위한 일반적인 방법이다. Long 타입은 null 값을 가질 수 있기 때문에 데이터베이스에 저장되기 전의 상태를 표현하는 데 적합하다.
'General > Java☕️' 카테고리의 다른 글
JDK와 JRE의 차이점 (1) | 2025.04.15 |
---|---|
멤버변수 ( 인스턴스변수, 클래스변수)와 지역변수 (0) | 2022.04.05 |