자바로 코딩할때 중요하지만 귀찮은 반복적인 코드를 써야한다. Lombok은 getter, setter, constructor 등 귀찮은 코드들을 자동화해주는 Java 라이브러리이다.

@NoArgsConstructor

단어를 직역해보면,

없는 인자 생성자
뜻 그대로 인자가 없는 생성자를 대신해서 쓴다.

설명하기에 앞서, 기본생성자에대해서 알아야하는데

기본생성자란 매개 변수 없고, 아무 작업 없이 단순 리턴하는 생성자이고 클래스에 생성자가 하나도 선언되어 있지 않을 때 컴파일러에 의해 기본 생성자가 자동으로 생성된다.

public class Member{
	private String name;
	private int age;
    
	public Member(){

	}
}
@NoArgsConstructor
public class Member{
	private String name;
	private int age;
}
  • 클래스 안에 이러한 인자가 없는생성자를 써주거나
  • @NoArgsConstructor을 생성자를 만들고싶은 클래스 상단에 써주면된다.

@RequiredArgsConstructor

단어를 직역해보면,

필요한 인자 생성자
뜻 그대로 필요한 인자의 생성자를 대신해서 쓴다.

@RequiredArgsConstructor을 설명할땐 이 삼단논법을 기억하면 좋다.

  • setter을 통해 값을 변경할 수 없다.
    -> 무조건 초기에 생성자를 통해서만 값을 설정해야한다.
    -> 따라서 무조건 생성자가 필요하다.
@RequiredArgsConstructor
public class Member {
	private final Integer id;
}

이코드에서 필드값인 id는 final로 선언되었기때문에 초기화 후 변경할 수 없다. 변경할 수 없다?

삼단논법각 !
-> 초기에 생성자를 통해서만 값을 설정해야한다.
-> 따라서 무조건 생성자가 필요하다.

일단 필요한 필드에 대해서만 생성자를 통해 설정하고
나중에 설정해도 되는 다른 필드들은 @Setter 를 통해 가변성을 부여한다.

public class Member {
	private final Integer id;
    @Setter
    private String name;
    
    public Member(Integer id) {
    	this.id = id;
	}
}

두번째경우는 final인 멤버변수가 없는경우이다. 아래코드를 보면 좀더 이해가 갈것이다.

public class Member{
	public Member(){
    
    }
}

어라, 어디서 본코드 아닌가? ( 아니여도 괜찮다 내가알려줄꺼니까 )
바로 @NoArgsConstructor 설명할때 쓴코드이다 ! 분명 @RequriedArgsConstructor 설명인데 이게 뭔소리지? 할 수 도있다. 필요한 인자를 생성자를 대신해서 쓴다고했지만 그 필요한 인자가 없으니 @NoArgsConstructor와 똑같은 역할을 하는것이다.

@AllArgsConstructor

단어를 직역해보면,

모든 인자 생성자
뜻 그대로 모든 인자의 생성자를 대신해서 쓴다.

클래스에 선언된 모든 필드값으로 만드는 모든 생성자를 대신해서 쓸 수 있다.

public class Member{
	private String name;
    private Integer age;
    
    public Member(String name, Integer age) {
    	this.name = name;
        this.age = age;
    }
}
@AllArgsConstructor
public class Member {
	private String name;
    private Integer age;
}
    
  • 클래스 안에 선언된 모든 인자를 만드는 생성자를 써주거나
  • @AllArgsConstructor을 클래스 상단에 써주면된다.

@AllArgsConstructor은 모든 필드가 생성자를 통해 이뤄줘야한다는 강제성이 있다.

정리하면,

@NoArgsConstructor ➕ @RequiredArgsConstructor

🟰 @AllArgsConstructor

코딩을 하기이전에 우선 영어로 적혀있기 때문에 만든사람이 왜 이렇게 만들었는지 의도를 생각하면서 공부하면 좋을것이다.
Lombok라이브러리의 정점까지 파고들어 비교한다면 틀릴 수 도있지만, 이런식으로 정리하면 기억하기 편할 것이다.

profile
열심히 = 하기싫을때도 최선을 다하는것

0개의 댓글