어노테이션 / @AllArgsConstructor, @NoArgsConstructor, @RequiredArgsConstructor

2025. 1. 22. 17:25·TIL

@AllArgsConstructor

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface AllArgsConstructor {
    String staticName() default "";
    AnyAnnotation[] onConstructor() default {};
    AccessLevel access() default lombok.AccessLevel.PUBLIC;

    @Deprecated
    @Retention(RetentionPolicy.SOURCE)
    @Target({})
    @interface AnyAnnotation {}
}
  • 모든 필드에 해당하는 매개변수를 갖는 생성자(all-args constructor)를 자동으로 생성
  • 생성된 생성자는 클래스에 정의된 모든 필드에 대해 각각 하나의 매개변수를 요구

@NoArgsConstructor

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface NoArgsConstructor {
    String staticName() default "";
    AnyAnnotation[] onConstructor() default {};
    AccessLevel access() default lombok.AccessLevel.PUBLIC;
    boolean force() default false;

    @Deprecated
    @Retention(RetentionPolicy.SOURCE)
    @Target({})
    @interface AnyAnnotation {}
}
  • 기본 생성자를 생성합니다.
  • final 필드의 존재로 인해 생성할 수 없는 경우 오류 메시지가 생성됩니다.

@RequiredArgsConstructor

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface RequiredArgsConstructor {
    String staticName() default "";
    AnyAnnotation[] onConstructor() default {};
    AccessLevel access() default lombok.AccessLevel.PUBLIC;

    @Deprecated
    @Retention(RetentionPolicy.SOURCE)
    @Target({})
    @interface AnyAnnotation {}
}
  • 필수 인자들로 생성자를 생성합니다.
  • 필수 인자란 final 필드와 @NonNull과 같은 제약이 있는 필드를 의미합니다.

staticName

이 옵션을 설정하면 생성된 생성자는 private으로 만들어지고, 동일한 매개변수 목록을 사용하는 추가적인 static 메서드가 생성되고 이 static 메서드는 실제 생성자를 호출하는 역할을 합니다.
이러한 static 메서드는 타입 인자 추론에 특히 유용합니다.
반환값:
static 메서드의 이름을 지정할 수 있습니다.
값을 비워두면 일반적인 생성자가 생성됩니다.

//User.java
@AllArgsConstructor(staticName = "staticConstructor")
public class User {
    private String name;
    private int age;
}
//User.class
public class User {
    private String name;
    private int age;

    @Generated
    private User(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

    @Generated
    public static User staticConstructor(final String name, final int age) {
        return new User(name, age);
    }
}

onConstructor

생성된 생성자에 추가적인 어노테이션을 적용할 수 있다.

@AllArgsConstructor(onConstructor_={@AnnotationsGoHere})

access

  • 생성자의 접근 수준을 설정합니다.
  • 기본값은 public
@AllArgsConstructor(access = AccessLevel.PRIVATE) 
public class User { 
    private String name; 
    private int age; 
}
public class User { 
    private String name; 
    private int age; 
    @Generated private User(final String name, final int age) { 
        this.name = name; this.age = age; 
    } 
}

force

  • true로 설정시 final필드를 0/null/false로 초기화
  • 기본값은 false
@NoArgsConstructor(force = true)
public class MyClass {
    private final int num;
    private final String s;
    private final boolean b;
}
public class MyClass {
    private final int num = 0;
    private final String s = null;
    private final boolean b = false;

    @Generated
    public MyClass() {
    }
}

@interface AnyAnnotation

  • 생성된 코드에 어노테이션을 적용하기 위한 플레이스홀더
  • 아마 onConstructor 속성과 관련된 것으로보임
  • 사용하지 말아야 하며, 문서를 반드시 읽으라고 권고하고 있다.
  • 이 어노테이션은 더 이상 사용되지 않습니다(@Deprecated).

'TIL' 카테고리의 다른 글

다이나믹 프록시(JDK Dynamic Proxy, CGLIB)  (1) 2025.02.05
일정관리 앱 트러블슈팅 1  (0) 2025.01.27
회사에서 좋아하는 개발자란  (1) 2025.01.20
키오스크 구현하기  (0) 2025.01.16
Enum 클래스 바이트코드 뜯어보기  (0) 2025.01.09
'TIL' 카테고리의 다른 글
  • 다이나믹 프록시(JDK Dynamic Proxy, CGLIB)
  • 일정관리 앱 트러블슈팅 1
  • 회사에서 좋아하는 개발자란
  • 키오스크 구현하기
shryoo
shryoo
shryoo 님의 블로그 입니다.
  • shryoo
    shryoo 님의 블로그
    shryoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • TIL (21)
      • 알고리즘 (57)
        • LeetCode (32)
        • 프로그래머스 (17)
        • 백준 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
shryoo
어노테이션 / @AllArgsConstructor, @NoArgsConstructor, @RequiredArgsConstructor
상단으로

티스토리툴바