롬복은 자바 라이브러리로 반복되는 getter, setter,toString등 다양한 메서드 작성 코드를 줄여주는 라이브러리이다! 반복적인 작업을 줄이고 코드를 더욱 간결하고 가독성 있게 만들어준다!
간단한 어노테이션을 사용해서 POJO클래스를 생성한다!
@Getter @Setter 어노테이션을 사용하면 해당 클래스 필드에 getter와 setter 메소드를 자동으로 생성한다.
public class CategoryModel {
private String id;
private String parentId;
private String name;
private Long depthLevel;
private Long seq;
private String userYn;
public CategoryModel() {}
public CategoryModel(String id, String parentId, String name, Long depthLevel, Long seq, String userYn) {
super();
this.id = id;
this.parentId = parentId;
this.name = name;
this.depthLevel = depthLevel;
this.seq = seq;
this.userYn = userYn;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getDepthLevel() {
return depthLevel;
}
public void setDepthLevel(Long depthLevel) {
this.depthLevel = depthLevel;
}
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public String getUserYn() {
return userYn;
}
public void setUserYn(String userYn) {
this.userYn = userYn;
}
@Override
public String toString() {
return "CategoryModel [id=" + id + ", parentId=" + parentId + ", name=" + name + ", depthLevel=" + depthLevel
+ ", seq=" + seq + ", userYn=" + userYn + "]";
}
}
롬복을 사용하기 전엔 위의 코드처럼 굉장히 길고 알아보기 힘들게 정리되어있다.
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class CategoryModel {
private String id;
private String parentId;
private String name;
private Long depthLevel;
private Long seq;
private String userYn;
}
어노테이션을 붙여주기만 함으로써, 굉장히 간단해졌다.
이 어노테이션조차 많다면 @Date하나만 붙여 사용 할 수 도있다.
@AllArgsConstructor는 클래스 필드에 있는 모든 변수들로 생성자를 만들어준다.
@AllArgsConstructor
public class AllArgstest {
private int a;
private int b;
private String c;
public void show(){
System.out.println(this.a);
System.out.println(this.b);
System.out.println(this.c);
}
}
public class Main {
public static void main(String[] args) {
AllArgstest allargstest = new AllArgstest(1,2,"asd");
allargstest.show();
}
}
@NoArgsConstructor
class NoArgstest{
private int a;
private int b;
private String c;
}
class RequireArgtest{
@NonNull
private int a;
private int b;
private String c;
private final String d;
@NonNull
private float e;
}
public class Main {
public static void main(String[] args) {
RequireArgtest requireArgtest = new RequireArgtest(1,"s",-3);
}
}
@ToString 어노테이션을 사용하면 ToString 메소드를 자동으로 완성시켜준다. 출력을 원하지 않는 변수에는 @ToString.Exclude 어노테이션을 붙여주면 제외 할 수 있다.
@ToString
@AllArgsConstructor
public class Tostringtest {
@ToString.Exclude // a는 출력을 원하지 않음.
private String a;
private String b;
private String c;
private boolean d;
}
public class Main {
public static void main(String[] args) {
Tostring_test tostringTest = new Tostringtest("asd","asd2","sdf",false);
System.out.println(tostringTest);
// 출력 : Tostringtest(b=asd2, c=sdf, d=false)
}
}
@Builder 어노테이션을 활용하면 해당 클래스 객체 생성에 Builder 패턴을 적용 시킨다.
모든 변수들에 대해 빌드하기를 원하면 해당 클래스 위에 @Builder 아노테이션을 붙이면 되지만, 특정 변수만 원한다면 생성자를 작성하고 그 위에 @Builder 어노테이션을 붙이면 된다.
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class Person {
private String name;
private int age;
private String address;
private String phone;
}
빌더 어노테이션을 붙여 간단하게 만들었고 이 때 Person 객체를 생성해서 사용하는 코드는
Person person = Person.builder()
.name("홍길동")
.age(30)
.address("서울시 강남구")
.build();
이렇게 된다.
@RequiredArgsConstructor(staticName = "of")
public class Point {
private final int x;
private final int y;
}
public class Main {
public static void main(String[] args) {
Point point = Point.of(10, 20); // 생성자 대신 of 메서드를 사용하여 객체를 생성
}
}
위 코드처럼 사용된다. 해당 클래스의 필드들을 파라미터로 받는 생성자를 생성하는데, 이 생성자의 이름을 지정하고 싶을 때 'staticName'을 사용한다.
위에 초록색으로 표시한 단어들은 개념들이 조금 헷갈리는 부분이라 밑에 따로 부가적인 설명을 붙였다
POJO : POJO는 Plain Old Java Object의 약자로 자바에서 일반적으로 사용되는 데이터 모델링 기법 중 하나이다. 복잡한 설명들이 많지만 간단하게 설명하자면 Getter와 Setter 메소드를 가진 자바 객체이다.
Getter와 Setter에 대해 조금더 부가적인 설명을 할려한다.둘의 사용목적은 다음과 같다.
Getter와 Setter란 객체 지향 프로그래밍에서 정보은닉(encapsulation)을 구현하기 위한 메소드이다.
여기서 Setter는 외부에서 메소드를 통해 데이터에 접근하도록 유도하는 역할이다.
Getter는 객체 외부에서 객체 필드값을 사용하기에 부적절한 경우가 있다. 이럴때 필드값을 가공후 외부로 전달하는 역할을 한다.
1.@Getter
import lombok.Getter;
@Getter
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
위와같은 getter 에서
Person person = new Person("John Doe", 30);
String name = person.getName(); // "John Doe"를 반환
int age = person.getAge(); // 30을 반환
원하는 값을 반환한다.
import lombok.Setter;
@Setter
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
위와같은 setter에서
Person person = new Person("John Doe", 30);
person.setName("Jane Doe"); // name 멤버 변수를 "Jane Doe"로 변경
person.setAge(25); // age 멤버 변수를 25로 변경
setName메소드로 원하는 값으로 변경해준다.
Getter는 원하는 객체필드의 변수를 반환해주고 Setter는 객체필드의 변수를 원하는데로 바꾸어준다.