롬복과 관련된 애너테이션들이 많이 있지만 자주 사용하는 애너테이션만 정리했음
1. @NoArgsConstructor : 기본 생성자를 만들어주는 애너테이션
<< @NoArgsConstructor 애너테이션 예시 >>
<< @NoArgsConstructor 애너테이션을 사용하지 않았을 경우 >>
package jpaStudy;
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
생성자가 없으므로 자바는 Member 클래스에 기본 생성자를 추가해줌
<< @NoArgsConstructor 애너테이션을 사용했을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
@NoArgsConstructor 애너테이션을 적용했으므로 롬복이 Member 클래스에 기본 생성자를 추가해줌
잘 알겠지만 위 두 상황은 똑같이 기본 생성자가 추가되므로 @NoArgsConstructor 애너테이션을 사용한 의미가 없음
속성 |
속성 명 | force |
설명 | 이 속성은 두 가지 역할을 함 1. 기본 생성자를 강제로 생성할지 여부를 지정할 수 있음 기본값은 false로 이 속성의 값이 false일 때 생성자가 있을 경우 이 애너테이션은 동작하지 않음 이 속성의 값이 true일 때 생성자가 있어도 이 애너테이션이 동작해 기본 생성자를 추가함 2. final 키워드가 붙은 멤버 변수가 있을 경우 이 속성의 값을 true로 지정하지 않으면 이 애너테이션이 컴파일 오류를 일으킴 final 키워드가 붙은 멤버 변수가 있을 경우 이 속성의 값을 반드시 true로 지정해야하며 그렇게 했을 때 롬복은 final 키워드가 붙은 멤버 변수의 값을 기본값으로 초기화해줌 |
<< force 속성 예시 >>
<< force 속성을 사용하지 않았을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
public Member(int idx, String name, String tel, int age, double height, char booldType) {
super();
this.idx = idx;
this.name = name;
this.tel = tel;
this.age = age;
this.height = height;
this.booldType = booldType;
}
}
@NoArgsConstructor 애너테이션이 있지만 Member 클래스에 이미 생성자가 있기 때문에 @NoArgsConstructor 애너테이션은 무시되 기본 생성자가 만들어지지 않음
<< force 속성을 사용했을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
public Member(int idx, String name, String tel, int age, double height, char booldType) {
super();
this.idx = idx;
this.name = name;
this.tel = tel;
this.age = age;
this.height = height;
this.booldType = booldType;
}
}
@NoArgsConstructor 애너테이션의 force 속성을 true로 지정했기 때문에 Member 클래스에는 기본 생성자도 함께 만들어짐
<< final 키워드가 붙은 멤버 변수가 있을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
public class Member {
private final int idx;
private String name;
private final String tel;
private int age;
private final double height;
private final char booldType;
}
멤버 변수에 final 키워드가 붙었을 경우 @NoArgsConstructor 애너테이션을 사용한다면 반드시 force 속성을 true로 지정해줘야함
이렇게 하면 롬복은 Member 클래스의 기본 생성자를 아래와 같이 만들어줌
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
public class Member {
private final int idx;
private String name;
private final String tel;
private int age;
private final double height;
private final char booldType;
public Member() {
idx = 0;
tel = null;
height = 0.0;
booldType = 0;
}
}
속성 명 | access |
설명 | 생성자의 접근제어자를 지정할 수 있음 이 속성의 값은 AccessLevel Enum을 사용해 지정함 |
<< access 속성 예시 >>
<< access 속성을 사용하지 않았을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
@NoArgsConstructor 애너테이션이 생성하는 기본 생성자의 접근 제어자가 public 으로 설정됨
<< access 속성을 사용했을 경우 >>
package jpaStudy;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
@NoArgsConstructor 애너테이션의 access 속성을 PRIVATE 로 지정했기 때문에 이 애너테이션이 생성하는 기본 생성자의 접근 제어자가 private 으로 생성됨
속성 명 | onConstructor |
설명 | 속성의 값으로 애너테이션을 사용함 생성자에 특정 애너테이션을 달아주는 속성 여러 애너테이션을 달때는 배열 형식으로 애너테이션들을 나열하면 됨 자바 8버전까지는 이 속성명이 onConstructor_ 이지만 자바 8 이후부터는 이 속성명이 onConstructor 로 바뀜 |
<< onConstructor 속성 예시 >>
<< onConsturctor 속성을 사용하지 않았을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
@NoArgsConstructor 애너테이션이 생성하는 기본 생성자에 아무런 애너테이션도 달리지 않음
<< onConstructor 속성을 사용했을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(onConstructor = @__(@Deprecated))
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
onConstructor 애너테이션의 속성값을 지정하는 방식이 독특한데 @ 다음 밑 줄이 두 개임 ( @_ _ )
위와 같이 onConstructor 속성 값에 애너테이션을 넣으면 아래와 같이 기본 생성자에 그 애너테이션이 붙어서 만들어짐
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(onConstructor = @__(@Deprecated))
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
@Deprecated
public Member() {
}
}
만약 onConstructor 속성을 사용해서 애너테이션을 여러 개 지정하고 싶다면 아래와 같이 배열의 형태로 애너테이션들을 나열하면 됨
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(onConstructor = @__({@Deprecated, @Inject, @NonNull}))
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
여기에 사용된 @Inject, @NonNull 애너테이션을 이해할 필요는 없음
이렇게 애너테이션을 여러 개 지정할 수 있다 를 보여주기 위해서 사용한 것
속성 명 | staticName |
설명 | 생성자를 감출 때 사용하는 속성 |
<< staticName 속성 예시 >>
<< staticName 속성을 사용하지 않았을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
이제는 잘 알고 있듯 @NoArgsConstructor는 접근제어자가 public인 기본 생성자를 만들어줌
<< staticName 속성을 사용했을 경우 >>
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(staticName = "getInstance")
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
staticName 속성을 사용하면 생성자를 감추기 위해 생성자의 접근 제어자를 private으로 만듬
즉, access = AccessLevel.PRIVATE 을 사용한 효과도 같이 얻음
그 후 이름은 getInstance 이고 반환 타입은 Member 타입 객체인 메서드를 만들어줌
아래 코드를 참고하자
package jpaStudy;
import lombok.NoArgsConstructor;
@NoArgsConstructor(staticName = "getInstance")
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
private Member() {
}
public Member getInstance() {
return new Member();
}
}
2. @RequiredArgsConstructor : final 키워드가 붙은 멤버 변수만 포함된 생성자를 만들어주는 애너테이션
<< @RequiredArgsConstructor 애너테이션 예시 >>
<< @RequiredArgsConstructor 애너테이션을 사용하지 않았을 경우 >>
package jpaStudy;
public class Member {
private final int idx;
private String name;
private final String tel;
private int age;
private final double height;
private final char booldType;
}
멤버 변수에 final 키워드가 있기 때문에 컴파일 오류가 발생하는 코드임
컴파일 오류를 피하려면 개발자가 직접 아래와 같이 어떤 값을 할당해주거나 생성자를 통해 어떤 값을 할당 받도록 해야함

<< @RequiredArgsConstructor 애너테이션을 사용했을 경우 경우 >>
package jpaStudy;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Member {
private final int idx;
private String name;
private final String tel;
private int age;
private final double height;
private final char booldType;
}
@RequiredArgsConstructor 애너테이션을 사용했을 경우 final 키워드가 붙은 멤버 변수만 값을 할당하는 생성자가 만들어짐
만들어지는 생성자의 형태는 아래 코드 참고
package jpaStudy;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Member {
private final int idx;
private String name;
private final String tel;
private int age;
private final double height;
private final char booldType;
public Member(int idx, String tel, double height, char booldType) {
this.idx = idx;
this.tel = tel;
this.height = height;
this.booldType = booldType;
}
}
속성 |
속성 명 | access |
설명 | 생성자의 접근제어자를 지정할 수 있음 이 속성의 값은 AccessLevel Enum을 사용해 지정함 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
속성 명 | onConstructor |
설명 | 속성의 값으로 애너테이션을 사용함 생성자에 특정 애너테이션을 달아주는 속성 여러 애너테이션을 달때는 배열 형식으로 애너테이션들을 나열하면 됨 자바 8버전까지는 이 속성명이 onConstructor_ 이지만 자바 8 이후부터는 이 속성명이 onConstructor 로 바뀜 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
속성 명 | staticName |
설명 | 생성자를 감출 때 사용하는 속성 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
3. @AllArgsConstructor : 모든 멤버 변수를 포함한 생성자를 만들어주는 애너테이션
<< @AllArgsConstructor 애너테이션 예시 >>
<< @AllArgsConstructor 애너테이션을 사용했을 경우 >>
package jpaStudy;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
}
@AllArgsConstructor 애너테이션을 사용했을 경우 아래와 같이 모든 멤버 변수에 값을 할당하는 생성자가 만들어짐
package jpaStudy;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Member {
private int idx;
private String name;
private String tel;
private int age;
private double height;
private char booldType;
public Member(int idx, String name, String tel, int age, double height, char booldType) {
super();
this.idx = idx;
this.name = name;
this.tel = tel;
this.age = age;
this.height = height;
this.booldType = booldType;
}
}
속성 |
생성자의 접근제어자를 지정할 수 있음 이 속성의 값은 AccessLevel Enum을 사용해 지정함 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
속성 명 | onConstructor |
설명 | 속성의 값으로 애너테이션을 사용함 생성자에 특정 애너테이션을 달아주는 속성 여러 애너테이션을 달때는 배열 형식으로 애너테이션들을 나열하면 됨 자바 8버전까지는 이 속성명이 onConstructor_ 이지만 자바 8 이후부터는 이 속성명이 onConstructor 로 바뀜 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
속성 명 | staticName |
설명 | 생성자를 감출 때 사용하는 속성 ※ @NoArgsConstructor 애너테이션에서 설명한 것과 동일한 속성이므로 예시는 생략 ※ |
참고
- https://velog.io/@0giri/Lombok-%EC%82%AC%EC%9A%A9%EB%B2%95
- https://lovethefeel.tistory.com/71
- https://javabydeveloper.com/lombok-noargsconstructor-examples/
'기타' 카테고리의 다른 글
롬복 사용 / 자주 사용하는 롬복 애너테이션 정리 (Lombok Annotation ) - 메서드 관련 애너테이션 (2) (2) | 2023.06.22 |
---|---|
롬복 사용 / 자주 사용하는 롬복 애너테이션 정리 (Lombok Annotation ) - 메서드 관련 애너테이션 (1) / Getter, Setter (5) | 2023.06.17 |
이클립스 디컴파일러 설치하기 ( Eclipse Decompiler ) (1) | 2023.06.14 |
롬복 ( Lombok ) 이란? / 롬복 설치 및 적용 (0) | 2023.06.14 |
Eclipse에서 Gradle로 자바 프로젝트 생성하기 (0) | 2023.06.13 |