[Spring Boot] Java Generic에서 Class만 써야 하는 이유

김광일·2024년 9월 25일
0

SpringBoot

목록 보기
13/19
post-thumbnail

Java Generci을 보면 int와 같이 데이터 타입이 아닌 Intger과 같이 Class를 사용해야 하는 것을 볼 수 있다.

| 예시

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    User findByUsername(String username);

    User findByPassword(String password);
}

이 예시처럼 JpaRepository에 들어가는 User의 Entity 말고, Integer에서 Class가 들어간다.

그 이유를 알아보자


Java에서 Generics는 컴파일 시점에 타입을 체크하고 타입 안전성을 보장하는 메커니즘이다.

기본형 타입 int, double 등의 값은 스택에 저장되는 값이고,
Generic은 힙 메모리에 할당되는 객체 참조를 다루기 때문에,

객체로 다뤄지는 참조형 타입만 지원되는 것이다.


한줄 요약 : JpaRepository의 경우 깐깐한 놈이라서 Generic 규칙을 보다 잘 지켜야 한다.

| 불가능한 코드

// 불가능한 코드
public interface UserRepository extends JpaRepository<User, int> {  // 오류 발생
}

: 위 코드는 int가 기본형이므로 컴파일 오류가 발생한다.. Generics는 기본형을 허용하지 않기 때문에 반드시 참조형인 Integer를 사용해야 한다.

profile
안녕하세요, 사용자들의 문제 해결을 중심으로 하는 프론트엔드 개발자입니다. 티스토리로 전환했어요 : https://pangil-log.tistory.com

0개의 댓글