개발/kotlin

WineDto에 소속될 grapeDto fromEntity설정

aihtnyc_h 2023. 6. 25. 07:44
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