@ColumnInfo(name = "Data", defaultValue = "0")
public int data;
Room DB에서 특정 필드에 defaultValue = "-1"로 설정했는데, 실제로는 0이 반환되는 경우는 주로 객체 초기화 시점과 관련이 있습니다.
@ColumnInfo(defaultValue = "-1")
는 SQL 테이블 생성 시점에만 적용됩니다.
즉, Room이 직접 INSERT할 때만 defaultValue가 적용됩니다.
객체를 Kotlin/Java에서 직접 생성해서 넣으면, 필드의 기본값은 언어의 기본값(int → 0, long → 0L, 등)으로 초기화됩니다.
@Entity
data class MyEntity(
@PrimaryKey val id: Int,
@ColumnInfo(defaultValue = "-1") val someValue: Int
)
이렇게 해도, 아래처럼 직접 생성하면 someValue는 0으로 들어갑니다:
val item = MyEntity(id = 1, someValue = 0) // ← 명시적이든 암묵적이든 0이 들어감
@Entity
data class MyEntity(
@PrimaryKey val id: Int,
@ColumnInfo(defaultValue = "-1") val someValue: Int? = null
)
이렇게 하면 someValue가 null일 경우 INSERT 시 DB에서 -1을 사용합니다.
단, 이후 조회할 때 someValue는 null 또는 -1일 수 있으므로, 코드에서 이를 처리해야 합니다.
@Entity
data class MyEntity(
@PrimaryKey val id: Int,
@ColumnInfo(defaultValue = "-1") val someValue: Int = -1
)
Kotlin에서는 생성자에 기본값을 지정하면 객체 생성 시 자동 적용됩니다.
이 경우 SQL의 defaultValue는 실제 의미는 없지만, DB 스키마와 일치시키기 위해 같이 써주는 것도 좋습니다.
@Query로 직접 INSERT문을 작성하고 someValue를 생략하면 Room이 SQL의 기본값을 사용합니다.
🧪 예시
SQL 생성 예 (defaultValue 적용)
CREATE TABLE MyEntity (
id INTEGER PRIMARY KEY NOT NULL,
someValue INTEGER DEFAULT -1
)
📌 요약
상황 결과
1. defaultValue = "-1" + Kotlin 객체에서 값 지정 X 0으로 초기화됨 (언어 기본값)
2. defaultValue = "-1" + nullable & 값 null 삽입 DB에서 -1 적용됨
생성자에서 기본값 직접 지정 (= -1) 항상 -1으로 초기화됨
아니요, @ColumnInfo(defaultValue = "-1")는 "값이 없을 때 Room이 자동으로 -1을 반환해준다"는 뜻이 아닙니다.
@ColumnInfo(defaultValue = "-1")는 Room이 해당 컬럼에 대해 INSERT SQL을 실행할 때 그 값이 명시되지 않으면, DB 레벨에서 -1을 기본값으로 채워준다는 의미입니다.
즉:
Room이 객체를 INSERT할 때 해당 필드가 빠지면, DB가 -1을 사용
SELECT로 데이터를 불러올 때 값이 없으면 -1로 리턴된다? → ❌ 아니다!
Room은 기본적으로 타입의 기본값을 반환함:
Int → 0
Long → 0L
Boolean → false
String → null
@Entity
data class MyEntity(
@PrimaryKey val id: Int,
@ColumnInfo(defaultValue = "-1") val score: Int? = null
)
이 경우, score가 null이면 DB가 -1을 채움.
SELECT 결과도 score == -1일 수 있음.
단점: nullable이므로 null 체크 필요.
val actualValue = entity.score.takeIf { it != 0 } ?: -1
@Entity
data class MyEntity(
@PrimaryKey val id: Int,
val score: Int = -1
)
@ColumnInfo(defaultValue = "-1")만 설정 INSERT 시 누락된 값만 -1, SELECT 시는 기본 타입 값(예: 0)
SELECT 결과에서 값이 없을 때 -1로 리턴됨? ❌ (기본적으로는 0 등으로 나옴)
리턴값이 항상 -1이 되도록 하려면? 생성자 기본값 지정하거나 후처리 필요
From. GPT