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