controller 에서 매개변수를 Long 으로 받아줬는데, 그에 대한 질문을 받았다.
: Long 과 long 의 차이가 뭔가 ?
: primitve, wrapper ...
: 그럼 컨트롤러의 매개변수에서 Long 을 쓰는 것과 long 을 쓰는 것의 차이는 뭔가 ?
: ?!
너두 당연하게 pk 값인 postId
의 type을 wrapper 인 Long 으로 해줬어서, 생각도 안해보고 Long 을 매개변수로 받아줬다.
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 타입 선택에 있어서도 중한 이유가 있다는 것을 알게 되었다.