[cs] primitive / wrapper null

gnoesnooj·2022년 1월 14일
0

매개변수 에서의 Long, long

controller 에서 매개변수를 Long 으로 받아줬는데, 그에 대한 질문을 받았다.

: Long 과 long 의 차이가 뭔가 ?
: primitve, wrapper ...
: 그럼 컨트롤러의 매개변수에서 Long 을 쓰는 것과 long 을 쓰는 것의 차이는 뭔가 ?
: ?!

너두 당연하게 pk 값인 postId 의 type을 wrapper 인 Long 으로 해줬어서, 생각도 안해보고 Long 을 매개변수로 받아줬다.

null 을 지원하는가 ?

Long은 Wrapper 이기 때문에 null을 가질 수 있고, long 은 primitive 이기 때문에 null 을 가질 수 없다. 따라서 controller 에서 어떤 매개변수 값이 있어야 하는 상황에, 다른 해결 방법도 있겠지만, Long 이 아닌 long 으로 처리 하는 것이 좋은 편이다.

비슷한 맥락으로, DB에서 사용하는 postId의 Type은 왜 Long으로 사용했을까 ?

그 이유는, postId 에는 @Id @GeneratedValue 속성을 부여 해줬고, strategy = GenerationType.AUTO를 해줬다.

postId 가 생성되는 시점을 생각해보면 위의 어노테이션들 덕분에 DB에 들어갈 때 생기게 된다. 즉 그 전까지는 해당 값이 null 이기 때문에, null을 지원하는 wrapper 의 Long 으로 해주는 것이 좋다.

정리

어떻게 보면 사소할 수 있는 wrapper, primitive 타입 선택에 있어서도 중한 이유가 있다는 것을 알게 되었다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글