Lombok 롬복

마자나다·2023년 4월 18일

Spring

목록 보기
1/9

Lombok이란?

롬복은 자바 라이브러리로 반복되는 getter, setter,toString등 다양한 메서드 작성 코드를 줄여주는 라이브러리이다! 반복적인 작업을 줄이고 코드를 더욱 간결하고 가독성 있게 만들어준다!


롬복 사용방법

간단한 어노테이션을 사용해서 POJO클래스를 생성한다!
@Getter @Setter 어노테이션을 사용하면 해당 클래스 필드에 getter와 setter 메소드를 자동으로 생성한다.

1. 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하나만 붙여 사용 할 수 도있다.



2.ArgsConstructor, 생성자 관련 어노테이션

1. @AllArgsConstructor

@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();

    }
}
  • 위와 같이 @AllArgsConstructor 사용하여, 생성자없이 a,b,c 변수에 1,2,"asd"들어가서 출력된다.

2. @NoArgsConstructor
@NoArgsConstructor
class NoArgstest{
    private int a;
    private int b;
    private String c;
}
  • @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해준다.
  • 디폴트 생성자가 자동으로 생성된다. 이 디폴트 생성자는 파라미터가 없는 생성자로, 주로 Bean객체를 생성할 때 유용하다.

3. @RequiredArgsConstructor
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);        
    }
}
  • @RequiredArgsConstructor 어노테이션은 클래스에 final로 선언된 필드나 @NonNull 어노테이션 부은 필드를 인자로 받는 생성자를 생성한다.
  • 위와 같은 코드는 a.d.e만 생성자로 만들어진다.
  • 객체의 상태가 생성 후 변경되지 않도록 보장하며, 이로써 객체의 안정성과 스레드 안정성을 향상시킬 수 있다.

3. ToString

@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)

    }
}

4.Builder

@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();

이렇게 된다.

그 외 자주 쓸만한 롬복 어노테이션.

  1. @NonNull : 자동으로 null을 체크를 진행하고 null인 경우
  2. @Data : 위에서 설명한 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 유용한 어노테이션이다.
  3. @RequiredArgcConstructor와 staticName 사용
@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을 반환

원하는 값을 반환한다.

  1. @Setter
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는 객체필드의 변수를 원하는데로 바꾸어준다.

profile
우왕좌왕 개발

0개의 댓글