Project/Study

[Spring Boot] Lombok

by somida 2021. 8. 3.

Lombok

Getter, Setter, 생성자, toString 등을 어노테이션을 활용해 자동으로 생성할 수 있음

 

장점

  • 어노테이션을 기반으로 코드를 자동 생성 가능
  • 가독성 및 유지보수성 향상

 

기능

  1. @NonNull
    • 해당 값이 null이 될 수 없음
    • null값이 들어오게 되면 NullPointException 발생
  2. @Getter, @Setter
    • get 메소드, set 메소드 생성하는 어노테이션으로 기본적으로 public
    • (AccessLevel.Private) : 접근제한자 설정가능(private, protected ...)
    • @Setter : 해당 클래스가 무결성을 보장해야할 때는 사용 지양(변동이 발생하면 안되는 경우)
  3. @NoArgsConstructor
    • 어떠한 변수도 사용하지 않는(파라미터가 없는) 기본 생성자를 자동완성시켜주는 어노테이션
    • (AccessLevel.PROTECTED) : 접근제한자 설정가능(private, protected ...)
  4. @AllArgsConstructor : 모든 필드값을 사용하는 생성자를 자동완성시켜주는 어노테이션
  5. @RequiredArgsConstructor : final이나 @NonNull인 필드값만 파라미터로 받는 생성자를 자동완성시켜주는 어노테이션
  6. @Builder
    • Builder 패턴 적용시켜주는 어노테이션
    • 보통 @AllArgsConstructor, @RequiredArgsConstructor를 지양하고 @Builder를 통해서 개발자 실수를 최대한 줄인다.(@Builder는 순서가 아닌 이름으로 입력을 받기 때문에)
    • 그리고 Class에 @Builder를 붙이기 보다는 직접 생성한 생성자에 붙이는 것을 권장
  7. @ToString
    • (exclude="") : 특정 필드를 toString()에서 제외시킴 (보통 token, 비밀번호 등을 제외)
    • toString() : 객체의 값들을 문자열로 만들어 return 하는 메소드
  8. @EqualsAndHashCode
    • (of = {"a", "b"}) : a와 b가 동일하다면 같은 객체로 인식
    • (callSuper=true) : equals, hashCode 메소드 자동 생성시 부모 클래스 필드 감안(부모 클래스 필드값도 동일한지 = true)
    • equals, hashCode 메소드 포함
      • equals() : 동등성 비교 (객체 내용이 같은지 비교)
      • hashCode() : 동일성 비교 (객체가 같은지 비교)
  9. @Data
    • @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 포함하는 어노테이션
    • 현업에서는 헤비하고 객체의 안정성도 고려해야하기 때문에 지양하는 어노테이션

 

Unit Test

1. Lombok Dependency 설정

  • gradle 5부터는 lombok annotationProcessor 설정 필요
dependencies {
    compile('org.projectlombok:lombok:1.18.18')
    annotationProcessor 'org.projectlombok:lombok:1.18.18'
}

 

2. Dto 작성

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class HelloResponseDto {
    private String name;
    private int age;

    @Builder
    public HelloResponseDto(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

 

3. Test 작성

  • assertThat : assertj라는 검증 라이브러리 검증 메소드
    • isEqualTo : 동등 비교 메소드
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;

public class HelloResponseDtoTest {

    @Test
    public void 롬복_테스트() {
        // given
        String name = "sandy";
        int age = 26;

        // when
        final HelloResponseDto dto = HelloResponseDto.builder()
                .name(name)
                .age(age)
                .build();

        // then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAge()).isEqualTo(age);
    }
}

 

반응형

'Project > Study' 카테고리의 다른 글

[Spring Boot] Spring Data JPA  (0) 2021.08.03
[Spring Boot] Unit Test 코드  (0) 2021.08.03
[Spring Boot] TDD, Unit Test  (0) 2021.08.03
[Spring Boot] Main Class, 생성자 주입  (0) 2021.08.03
[Spring Boot] 빌드 도구  (0) 2021.08.03

댓글