일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자료구조공부
- JPA스터디
- nestjs스터디
- Axon framework
- 플러터 개발
- 스프링공부
- 코테준비
- 코테공부
- querydsl
- 스프링부트공부
- JPA 공부
- 스프링
- nestjs
- 플러터 공부
- 카프카
- 자바공부
- 프로그래머스
- DDD
- 기술공부
- 스프링 공부
- Flutter
- 알고리즘공부
- nestjs공부
- JPA
- Kafka
- JPA공부
- 기술면접공부
- JPA예제
- 스프링부트
- K8S
- Today
- Total
DevBoi
[Java] Lombok 주의사항 본문
롬복은 어노테이션으로 편하게 getter,setter,생성자 등등을 사용할 수 있는 것이다.
근데, 사용시에 주의해야하는 사항이 있다.
AllArgsConstructor, RequiredArgsConstructor 사용금지
생성자 필드에 대한 자동 생성 어노테이션이다. 해당 필드에 대한 값의 순서만 바꾸면 ,생성자에대한 값도 바뀌게 되는데,
이는 오류 발생이 높다. 아무 생각없이 순서만 바꿔도 로직에서 동작을 안하거나,잘못된 값들이 저장 되는 위험이 있다.
AllArgs -> 모든 필드를 생성자의 인수로 만들어주는 어노테이션
Required -> 초기화 되지않은 final, @nonnull이 붙은 필드에 대해 생성자를 생성해준다.
@EqualsAndHashCode 사용자제
EqualsAndhashCode에 대한 어노테이션은 우선 아래와 같다.
equals,hashcode자동생성을 해준다.
equals : 두 객체의 내용이 같은지, 동등성을 비교하는 연산자
hashcode : 두 객체가 같은 객체인지, 동일성을 비교하는 연산자
추가로, callSuper를 활용하여, 부모 클래스 필드값들도 동일한지 체크할수 있다. 기본값은 false이다.
기본으로 객체에 대한 값 비교는 주소를 통해서 이루어지지만,
equals and hashcode를 사용하게 되면, 값이 변경 가능한 객체를 체크하거나, 확인할 때
값이 변경되면 데이터가 유실 된다.
ex.
때문에 해당 어노테이션은, 값이 변경가능한 클래스에서는 사용하지 않는 것이 좋다.
아니면 파라미터를 넣어서 특수한 값으로 제어해야한다. 아무 파라미터가 없는 해당 어노테이션은 사용하지 않아야한다.
@EqualsAndHashCode(of={“필드명시”}) 형태로 동등성 비교에 필요한 필드를 명시하는 형태로 사용한다.
@Data 사용금지
Dataa는 EqualsAndHashCode와 RequiredArgsConstructor등을 포함하는 Mutable한 데이터클래스를 만들어주는 조합형 애노테이션이다.
사용을 아예 금지하고, 명시를 하여, 필요한 어노테이션에 대해서만 사용하는 것이 좋다.
@Value 사용금지
해당 어노테이션은 불변클래슬르 만들어주는 조합 애노테이션이다.
EqualsAndHashcode, AllargsConstructor가 포함된다.
equalsandhashcode는 불변이라 사용하는데 문제가 안되지만,
Allargs가 문제가 된다.
'Language > [Java]' 카테고리의 다른 글
[Java] Shallow Copy Deep Copy (0) | 2022.05.03 |
---|---|
[Java] 쿠키와 세션 (0) | 2022.05.03 |
[Java] Static Factory method (0) | 2022.05.01 |
[java] war파일 jar파일 비교 (0) | 2022.05.01 |
[Java] Static이란? (0) | 2022.04.28 |