kotlin 은 null safe 언어이기 때문에 plus 기호로 연결된 경우에도 에러를 만들지 않습니다. 그러나 의도와 다른 코드를 만들 가능성이 있습니다.
// 이 문자열을 지정된 다른 개체의 문자열 표현과 연결합니다.
// 수신자 또는 다른 객체가 null이면 문자열 "null"로 표시됩니다.
public operator fun String?.plus(other: Any?): String
fun main() {
val sum = null + null
println(sum)
}
[실행결과]
nullnull
그래서 다음과 같은 코드 추가로 작성합니다
data class Vec2(val value: Int, val value2: Int)
operator fun Vec2?.plus(other: Vec2?) : Vec2 {
val vec1 = this ?: Vec2(0, 0)
val vec2 = other ?: Vec2(0, 0)
return Vec2(vec1.value + vac2.value, vec1.value2 + vec2.value2)
}
fun main() {
val sum = null + null
println(sum)
}
[실행결과]
Vec2(value=0, value2=0)
operator override (연산자 오버로딩) 을 이용하여 저의 의도에 맞는 코드를 작성해주었습니다. operator override로 nullable 클래스로 변경한 후 값이 존재 하지 않으면 0이라는 값을 사용하게 하였습니다.