Java 코드를 Scala 코드로 변경하다보면 implicit conversion 때문에 NullPointerException이 발생하는 경우가 종종 있다.
예들 들어 다음과 같은 경우이다.
@Test def moveToTag_부모_태그_ID_is_null {
val parentTagId: Long = null
val newTag: Tag = aTag.withId(1L).withName("newTag").build
when(tagRepository.findOne(parentTagId)).thenReturn(null)
when(tagRepository.findOne(newTag.getTagId)).thenReturn(newTag)
dut.moveToTag(newTag.getTagId, parentTagId)
assertThat(newTag.isPooled, is(true))
}
위 소스 코드를 실행하면 다음과 같은 에러가 발생한다.
java.lang.NullPointerException
at scala.Predef$.Long2long(Predef.scala:358)
at net.slipp.service.tag.TagServiceTest.moveToTag_부모_태그_ID_is_null(TagServiceTest.scala:29)
위와 같은 에러가 발생하는 원인은 값이 null인 parentTagId를 implicit conversion이 발생하기 때문이다. 이 에러를 해결하는 방법은 Long type에 대한 implicit conversion이 발생하지 않도록 명시적으로 java.lang.Long을 import하는 것이다.
이 보다 더 좋은 해결 방법은 null 값을 직접 사용하지 않고 Option을 사용하는 것이다. Option에 대한 구체적인 내용은 Java 소스를 Scala로 전환할 때 null 값 처리는? 문서를 참고한다.
0개의 의견 from SLiPP
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.