Rlog

Kotlin Spring 에서 Required = false 대신 ?(nullable) 을 사용가능한 이유 본문

Spring

Kotlin Spring 에서 Required = false 대신 ?(nullable) 을 사용가능한 이유

dev_roach 2022. 3. 17. 10:30
728x90

회사 코드를 짜다가 문득 생각이 하나 들었는데 Java 에서 @RequestParam(Required = false) 대신 Optional<Int> Long id 이런식으로 사용하면 동일하게 작동할 수 있다는 사실을 알고 있었다. 이것이 가능한 이유는 Spring Framework 의 RequestParamArgumentResolver 코드에 아래와 같은 코드가 존재한다.

여기서 중요한건 parameter.nestedIfOptional 인데 해당 Type 이 옵셔널인지 확인해주는 코드이다.

그래서 코틀린에서도 ?(nullable-type) 을 통해서 충분히 가능하지 않을까 생각하고 동일 위치에 디버그를 찍어보았다.

위의 디버깅 결과가 결론을 말해주는데

즉, 코틀린에서는 required = false 를 사용할 이유가 없다. 

왜냐하면 isOptional() 이라는 메소드에서 Nullable 한 Type 의 값도 Optional 하게 체크되기 때문이다.

 

참고 하고 싶다면 Optional 은 아래와 같이 체크된다.