본문 바로가기

Development/Spring

[Spring] Lombok

이미지 출처: https://velog.velcdn.com/images/kjyeon1101/post/fbf946b1-3ec3-4b7c-b841-15e24ad1ff26/image.png

Lombok (롬복)

  • Lombok은 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 getter/setter같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다.
  • 이는 반복되는 코드를 생략하여 가독성을 높여줄 수 있다.
  • 또한 어노테이션 기반으로 코드를 자동 생성해주어 생산성이 높아진다.

Lombok 의존성 추가

Gradle

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

build.gradle에 dependencies에 위 코드를 추가

Maven

<dependencies>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependencies>

pom.xml에 위 코드를 추가

Lombok의 주요 어노테이션

@Getter, @Setter
  • 클래스에 선언돼 있는 필드에 대한 getter/setter 메서드를 생성한다.

생성자 자동 생성 어노테이션

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

@ToString

  • toString() 메서드를 생성하는 어노테이션
  • @ToString(exclude = "필드명") 으로 특정 필드를 제외할 수 있다.
  • 다음은 출력 예시이다.
Product(id=1, name="Product Name", price=10.0)

EqualsAndHashCode

@EqualsAndHashCode는 객체의 동등성(Equality)와 동일성(Identity)을 비교하는 연산 메서드를 생성한다.

  • equals: 두 객체의 내용이 같은지 동등성을 비교한다.
  • hashCode: 두 객체가 같은 객체인지 동일성을 비교한다.
    만약 부모 클래스가 있어서 상속을 받는 상황이라면 부모 클래스의 필드까지 비교할 필요가 있는 경우가 발생한다.
    이 때 @EqualsAndHashCode(callSuper = true)로 부모 클래스의 필드를 비교 대상에 포함할 수 있다.

동등성과 동일성에 관하여

Equality(동등성):

  • 두 객체가 가진 속성 또는 값을 비교
  • 같은 데이터를 갖는지를 검사하기 때문에, 어느 메모리에 위치하고 있는지는 신경쓰지 않는다.
  • equals() 메서드를 사용하여 동등성을 구한다.

Identity:(동일성)

  • 두 객체가 같은 메모리 주소에 있는지를 비교합니다.
  • == 연산자로 비교합니다.

예제

String str1 = "Hello";
String str2 = new String("Hello");
  • str1.equals(str2)true이다. 왜냐하면 두 문자열이 같이 때문이다.
  • str1 == str2false이다. 둘은 다른 메모리 영역에 위치하고 있기 때문이다.

@Data

@Getter,@Setter,@RequiredArgsConstructor,@ToString,@EqualsAndHashCode를 모두 포함하는 어노테이션 이다.

참고 자료

  • 스프링 부트 핵심 가이드 "스프링 부트를 활용한 애플리케이션 개발 실무" , 장정우, 2022