728x90
반응형
프로젝트를 마무리하며 리팩토링을 시작했다.
객체 생성시 @NonNull을 사용했는데(첫 프로젝트에서는 이런 방식으로 했다. 왜냐면 단순히 null값을 받으면 안된다고 생각했기 때문) 프로젝트 진행하면서 validation의 @NotNull로 수정했다.(프로젝트에서 validation을 사용하기 때문)
하지만 마지막 리팩토링 기간에는 @Column(nullabe = false)으로 수정하면서 이 세 녀석에 대한 궁금증이 생겼다.
1. @NonNull
@NonNull은 주로 lombok 라이브러리에서 호출해서 많이 사용한다. 주로 NullPointException을 방지하기 위해 사용한다. 메서드의 매개변수나 객체의 필드가 null이 아니어야 호출한다. 즉, 해당 생성자를 호출할 때 null값을 전달하지 않는다.
2. @NotNull
@NotNull은 Bean Validation에서 제공하는 스펙이다. 객체나 필드의 값이 null이 아니어야 하고 주로 데이터 유효성 검사에 사용된다. null인 경우는 안되지만 비어있는 경우는 상관 없다.
3. @Column(nullabe = false)
이 어노테이션은 jpa어노테이션으로 데이터 엔터티 필드에 대한 설정을 지정해준다. 필드가 데이터 베이스 테이블의 열(column)과 매핑될 때 해당 열이 null값을 허용하지 않도록 지정한다.
정리하자면 상황의 차이, 스타일의 차이도 있는 것 같다. 유효성 검사까지 하려면 validation에서 제공하는 notnull을 사용하면 된다. null 포인터 예외를 방지하고 싶다면 notnull을 사용하면 된다.(나머지 친구들은 직접적으로 해주지 않기 때문) 데이터베이스 스키마에서 null값을 허용하지 않도록 엄격하게 정의하려면 @Column(nullabe = false)을 사용하면 된다. 우리가 마지막에 컬럼으로 수정한 이유는 entity와 직접적인 db에 null이 들어가지 않게 하기 위해서인 것 같다.
++ 프로젝트를 하면서 깨달은 건데 데이터베이스와 일관성을 유지하기 위해 entity에는 3번. 컬럼을 사용해 nullabe 안됨 처리를 해주고, dto에서 string에는 notblank를(스페이스바와 같은 공백도 감지하기 때문), long에는 notnull을 사용해준다.
728x90
반응형
'어쩌면 모두 궁금할지도?' 카테고리의 다른 글
객체 지향적으로 개발해야 하는 이유 (0) | 2023.11.02 |
---|---|
implements vs. extends (0) | 2023.10.12 |
Arrays.sort() vs. Collections.sort() (0) | 2023.07.18 |
intValue() vs. Integer.parseInt() (0) | 2023.07.12 |
.equals() 재밌는 실험 (0) | 2023.07.12 |