베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Programming/[Spring Boot]

Lombok

2023. 3. 12. 22:39
💡
데이터(Entity 등) 클래스를 생성할 때 반복적으로 사용하는 getter/setter 같은 메서드를 Annotation으로 대체하는 기능 제공

장점

  • Annotation 기반으로 코드를 작성하므로 생산성이 높아짐
  • 반복되는 코드를 생략할 수 있어 가독성이 높아짐
  • Lombok을 안다면 코드를 유추할 수 있어 유지보수에 용이

Intellij에 Lombok 설치

  1. File→Settings 에 들어간다.
File→Settings
  1. Plugins→lombok 검색 후 설치한다.
Plugins→lombok 설치

File→Settings→Build, Execution, Deployment→Compiler→Annotation Processors 에서 Enable annotation processing을 체크한다.


맛보기

다음과 같은 클래스가 있다.

Member.java

public class Member {
    private String name;
    private Integer age;
    private Integer birthday;
    private Integer studentNumber;
    private Integer grade;
}

IDE 기능을 활용하여 생성자, getter/setter 코드를 추가하면 다음과 같다.

public class Member {
    private String name;
    private Integer age;
    private Integer birthday;
    private Integer studentNumber;
    private Integer grade;

    public Member() {
    }

    public Member(String name, Integer age, Integer birthday, Integer studentNumber, Integer grade) {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
        this.studentNumber = studentNumber;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getBirthday() {
        return birthday;
    }

    public void setBirthday(Integer birthday) {
        this.birthday = birthday;
    }

    public Integer getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(Integer studentNumber) {
        this.studentNumber = studentNumber;
    }

    public Integer getGrade() {
        return grade;
    }

    public void setGrade(Integer grade) {
        this.grade = grade;
    }
}

코드 길이가 매우 길어지기 때문에 Lombok의 Annotation을 활용해보자

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Member {
    private String name;
    private Integer age;
    private Integer birthday;
    private Integer studentNumber;
    private Integer grade;
}

매우 짧아진 것을 확인할 수 있다.


Annotation 코드화 하기

만약 Lombok Annotation으로 되어있는 코드를 실제 코드화 시키려면 다음과 같이 하면 된다.

파일 우클릭 → Refactor → Delombok


생성되는 코드 확인하기

Lombok을 통해 생성되는 코드가 어떤 것이 있는지 확인하려면 다음처럼 하면 된다.


주요 Annotation

@Getter, @Setter

클래스 필드 getter/setter 메서드를 생성해준다.

생성자 자동 생성 Annotation

  • @NoArgsConstructor
    • 매개변수가 없는 생성자 생성
  • @AllArgsConstructor
    • 모든 필드를 매개변수로 받는 생성자 생성
  • @RequiredArgsConstructor
    • 필드 중 final이나 @NotNull이 설정된 변수를 매개변수로 갖는 생성자 생성

@ToString

toString() 메서드를 생성해준다.

IDE에서 자동생성해주는 toString()과 동일

@ToString(exclude = {“필드명1”, “필드명2”})

  • 클래스에서 필드명1, 필드명2를 제외하고 toString 메서드를 생성한다.

@EqualsAndHashCode

객체의 동등성과 동일성을 비교하는 연산 메서드 생성

  • 동등성
    • 두 객체의 내용이 같은 지 비교
  • 동일성
    • 두 객체가 같은 객체인지 동일성을 비교
  • callSuper
    • @EqualsAndHashCode(callSuper = true)
      • 부모 클래스의 필드까지 비교할 필요가 있는 경우

@Data

@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 를 모두 포함하는 Annotation



Uploaded by N2T

'Programming > [Spring Boot]' 카테고리의 다른 글

JPA save vs saveAndFlush  (0) 2023.03.16
Entity 관련 Annotation  (0) 2023.03.12
JpaRepository getById, findById  (0) 2023.03.12
DB 관련 용어  (1) 2023.02.01
Swagger를 활용한 REST API 명세 문서화  (0) 2023.01.25
    'Programming/[Spring Boot]' 카테고리의 다른 글
    • JPA save vs saveAndFlush
    • Entity 관련 Annotation
    • JpaRepository getById, findById
    • DB 관련 용어
    베오
    베오

    티스토리툴바