롬복과 관련된 애너테이션들이 많이 있지만 자주 사용하는 애너테이션만 정리했음


 

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/

 - https://projectlombok.org/features/

728x90
LIST