@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 |