[JAVA] 자주 사용하는 Lombok 어노테이션

yeonjoo913·2023년 7월 14일

JAVA

목록 보기
6/19
  • @Data (사용 지양)
    • @ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor 을 한번에 생성해준다.
    • 해당 메소드를 자동으로 생성해준다는 것이지, 유효성 검사를 한다던가, 예외처리를 해준다는 개념은 아니다.
    • 주의할 점
      • 무분별하게 @Getter,@Setter를 사용하게 되고 @RequiredArgsConstructor 등을 포함하기 때문에 사용하지 않는 것이 좋다.
    • 권장하는 방법
      • @Data를 사용하는 것 보다 @Getter,@Setter 등 필요한 어노테이션을 각각 선언하는 것을 권장한다.
  • @EqualsAndHashCode
    • Equals와 HashCode 메소드를 자동으로 생성해준다.
      • equals : 두 객체의 내용이 같은지, 동등성을 비교
      • hashCode : 두 객체가 같은 객체인지. 동일성을 비교
    • 속성
      • callSuper = false : 자신 클래스의 필드값만 적용
      • callSuper = true : 자신 클래스 뿐만아니라, 부모클래스 필드값도 체크
      • of : 메소드를 만들 때 포함할 변수 설정
      • exclude : 메소드를 만들 때 제외할 변수 설정
    • 주의할 점
      • 상속 받은 클래스가 있다면, callSuper = true 명시가 필요
    • 권장하는 방법
      • @EqualsAndHashCode(of={“변수명”}) 형태로 동등성 비교에 필요한 필드를 명시하는게 좋다.
  • @Getter/ Setter
    • getter와 setter를 생성한다.
    • 클래스와 필드에서 모두 사용가능하다.
    • 속성
      • AccessLevel : 접근제한자를 설정해줄 수 있다.
      • 접근제한자는 public.protected,package,private이 있다.
    • 주의할 점
      • setter 같은 경우 해당 클래스가 무결성(변경하면 안되는)을 보장해야 하는 경우 사용을 지양해야 된다.
  • @NoArgsConstructor
    • 파라미터가 없는 기본 생성자를 생성한다.
    • 속성
      • access : AccessLevel을 이용하여 접근 제한자를 설정해줄 수 있다.
    • 주의할 점
      • 기본 생성자를 public으로 열어두면 안전성이 심각하게 저하된다.
      • static 변수들은 스킵된다.
      • 필드들이 final로 생성되어 있는 경우에는 필드를 초기화 할 수 없기 때문에 생성자를 만들 수 없고 에러가 발생하게된다.
    • 권장하는 방법
      • @NoArgsConstructor(access = AccessLevel.PROTECTED) 를 사용하여 객체 생성 시 안전성을 보장해주는 것을 권장한다.
  • @RequiredArgsConstructor / @AllArgsConstructor
    • AllArgsConstructor : 모든 변수를 파라미터로 받는 생성자를 생성한다.
    • RequiredArgsConstructor : final 혹은 @NonNull 인 변수만 파라미터로 받는 생성자를 생성한다.
    • 속성
      • access : AccessLevel을 이용하여 접근 제한자를 설정해줄 수 있다.
      • staticName : 생성자 관련 어노테이션은 모두 사용할 수 있다. 생성자를 private으로 생성하고, private 생성자를 감싸고 있는 static factory 메소드를 추가할 수 있다.
    • 주의할 점
    • 같은 타입의 변수들 중 변수의 위치가 변하게 되면 생성자의 위치도 바뀌지만 입력에는 둘다 같은 타입이라 오류가 발생하지 않는다. 인지못할 수도 있다.
  • Builder
    • 빌더 패턴을 사용할 수 있도록 코드를 생성한다.
    • 주의할 점
      • @Builder도 private으로 만들긴 하지만 @AllArgsConstructor를 내포한다. 해당 클래스의 다른 메소드에서 이렇게 자동으로 생성된 생성자를 사용하거나 할 때 문제 소지가 있다.
    • 권장하는 방법
      • @Builder를 Class 보다는 직접만든 생성자 혹은 static 객체 생성 메소드에 붙이는 것을 권장한다.
      • private생성자를 구현하여 @Builder를 지정한다. @Builder를 Class에 적용시키면 생성자의 접근레벨이 default이기 때문에, 동일 패키지 내에서 해당 생성자로 호출할 수 있는 문제가 있기 때문이다.
profile
주니어 백엔드 개발자. 까먹는다 기록하자!

0개의 댓글