본 캠프_55일차

졸용·2025년 5월 7일

TIL

목록 보기
56/144

Integer와 int 차이

Integerint는 Java에서 숫자를 다룰 때 자주 쓰이지만, 서로 다른 타입이다.
차이를 요약하면 기본형 vs 참조형, 그리고 null 가능성기능 제공 여부이다.


🔢 1. 기본형 vs 참조형

구분intInteger
타입기본형 (primitive)참조형 (wrapper class)
메모리스택에 값 자체 저장힙에 객체로 저장 (레퍼런스 타입)
null 허용❌ (null 불가능)✅ (null 가능)
기능✅ (메서드 사용 가능, 예: toString(), compareTo())
성능✅ 빠름 (오버헤드 없음)❌ 상대적으로 느림 (객체화 비용)

🔄 2. 오토박싱 / 언박싱

Java는 intInteger 자동 변환을 지원한다:

int a = 10;
Integer b = a; // 오토박싱: int → Integer
int c = b;     // 언박싱: Integer → int

하지만 null을 언박싱하면 NullPointerException 발생:

Integer x = null;
int y = x; // ❌ NullPointerException

🧠 사용 시기

  • int → 빠르고 단순한 연산이 필요할 때 (계산, 루프 등)

  • Integer → 객체가 필요한 상황 (예: 제네릭, 컬렉션, null 저장)

예: List<int>는 불가능하지만 List<Integer>는 가능



✅ @Modifying이란?

@Modifying 어노테이션은 Spring Data JPA에서 @Query와 함께 사용되는 데이터 변경용 쿼리에 붙이는 어노테이션입니다.
즉, SELECT가 아니라 INSERT, UPDATE, DELETE 같은 데이터를 수정하는 쿼리에 필요합니다.


🔧 왜 필요한가?

Spring Data JPA에서 @Query는 기본적으로 조회(SELECT) 쿼리로 처리된다.
하지만 @Modifying을 붙이면 이 쿼리는 데이터 변경용이야라고 명시하게 되어 실행이 가능하다.


✅ 사용 예시

@Modifying
@Query("UPDATE User u SET u.userName = :userName WHERE u.id = :userId")
int updateUserName(@Param("userId") Long userId, @Param("userName") String userName);

int는 영향을 받은 row 수이다.


🔄 트랜잭션 필요

@Modifying은 실제 DB를 변경하므로, 반드시 @Transactional 안에서 호출되어야 한다.
서비스 메서드에 @Transactional을 붙이거나, 레포지토리 메서드 위에 붙여도 된다.


🧠 요약

항목설명
용도@Query를 이용한 INSERT/UPDATE/DELETE 쿼리
필수 조건@Transactional과 함께 사용
반환 타입void 또는 int (수정된 row 수)
profile
꾸준한 공부만이 답이다

0개의 댓글