728x90
반응형
SMALL
**Grape?**이라는 타입은 Grape 객체를 가리키거나 **null**을 가질 수 있다는 것을 나타낸다. 이러한 nullable 타입의 변수에 접근할 때 Kotlin은 기본적으로 안전을 보장한다.
- ?. (Safe Call) 연산자는 이 변수가 **null**이 아니라면 해당 속성이나 메소드를 호출하고, **null**이라면 그대로 **null**을 반환한다.
- !!. (Non-null Assertion) 연산자는 이 변수가 **null**이 아니라고 확신할 때 사용한다. 만약 **null**이라면 Kotlin에서는 **NullPointerException**을 발생시킨다.
그러므로 위 에러 메시지는 Grape? 타입에 대해 접근하려는 시도가 있었으나 안전한 방법(?. 또는 !!.)을 사용하지 않았다는 것을 알려준다.
예를 들어 grape?.name_korean 이라고 쓰면, grape 객체가 **null**이 아닌 경우 **name_korean**에 접근하고, **null**인 경우 **null**을 반환한다. 반면에 **grape!!.name_korean**이라고 쓰면, grape 객체가 **null**이라면 **NullPointerException**이 발생한다.
전에 완성한 코드
package grape.dto
import grape.entity.Grape
import importer.dto.ImporterDto
import org.springframework.data.jpa.domain.AbstractPersistable_.id
import region.dto.RegionDto
import wine.dto.WineDto
import winery.dto.WineryDto
data class GrapeDto(
val id: Long,
val name_korean: String,
val name_english: String,
val acidity: String,
val body: String,
val sweetness: String,
val tannin: String,
val region: RegionDto? = null,
) {
companion object {
fun fromEntity(grape: Grape?): GrapeDto {
return GrapeDto(
id = grape.id,
name_korean = grape.name_korean,
name_english = grape.name_english,
acidity = grape.acidity,
body = grape.body,
sweetness = grape.sweetness,
tannin = grape.tannin,
region = grape.region?.let { RegionDto.fromEntity(it) },
)
}
}
}
수정한 코드
package grape.dto
import grape.entity.Grape
import importer.dto.ImporterDto
import org.springframework.data.jpa.domain.AbstractPersistable_.id
import region.dto.RegionDto
import wine.dto.WineDto
import winery.dto.WineryDto
data class GrapeDto(
val id: Long,
val name_korean: String,
val name_english: String,
val acidity: String,
val body: String,
val sweetness: String,
val tannin: String,
val region: RegionDto? = null,
) {
companion object {
fun fromEntity(grape: Grape?): GrapeDto {
return GrapeDto(
id = grape?.id ?: 0L,
name_korean = grape?.name_korean ?: "",
name_english = grape?.name_english ?: "",
acidity = grape?.acidity.toString() ?: "",
body = grape?.body.toString() ?: "",
sweetness = grape?.sweetness.toString() ?: "",
tannin = grape?.tannin.toString() ?: "",
region = grape?.region?.let { RegionDto.fromEntity(it) },
)
}
}
}
올려야하는데.. 깜빡하고.. 이제 올리 옵니다 ㅠㅠ
728x90
반응형
LIST
'개발 > kotlin' 카테고리의 다른 글
Kotlin - Dto에서 fromEntity 설정 (오답노트) (0) | 2023.06.23 |
---|