
자바로 코딩할때 중요하지만 귀찮은 반복적인 코드를 써야한다. Lombok은 getter, setter, constructor 등 귀찮은 코드들을 자동화해주는 Java 라이브러리이다.
단어를 직역해보면,
없는 인자 생성자
뜻 그대로 인자가 없는 생성자를 대신해서 쓴다.
설명하기에 앞서, 기본생성자에대해서 알아야하는데
기본생성자란 매개 변수 없고, 아무 작업 없이 단순 리턴하는 생성자이고 클래스에 생성자가 하나도 선언되어 있지 않을 때 컴파일러에 의해 기본 생성자가 자동으로 생성된다.
public class Member{
private String name;
private int age;
public Member(){
}
}
@NoArgsConstructor
public class Member{
private String name;
private int age;
}
단어를 직역해보면,
필요한 인자 생성자
뜻 그대로 필요한 인자의 생성자를 대신해서 쓴다.
@RequiredArgsConstructor을 설명할땐 이 삼단논법을 기억하면 좋다.
@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와 똑같은 역할을 하는것이다.
단어를 직역해보면,
모든 인자 생성자
뜻 그대로 모든 인자의 생성자를 대신해서 쓴다.
클래스에 선언된 모든 필드값으로 만드는 모든 생성자를 대신해서 쓸 수 있다.
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은 모든 필드가 생성자를 통해 이뤄줘야한다는 강제성이 있다.
코딩을 하기이전에 우선 영어로 적혀있기 때문에 만든사람이 왜 이렇게 만들었는지 의도를 생각하면서 공부하면 좋을것이다.
Lombok라이브러리의 정점까지 파고들어 비교한다면 틀릴 수 도있지만, 이런식으로 정리하면 기억하기 편할 것이다.