공부/Spring

Lombok(롬복)

동곤영 2022. 6. 18. 00:51

본 포스트는 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 참고하여 작성하였습니다.

 

롬복을 활용하여 리팩토링을 해보자

 

Lombok (롬복) 이란?

롬복은 자바 개발할 때 자주 사용하는 코드 Getter, Setter 기본생성자, toString 등을 어노테이션으로 자동 생성 해주는 라이브러리다.

 

롬복으로 변경하고 문제가 생기는지 실제로 적용해보자!

 

먼저 Dto를 하나 생성한다.

 

HelloResponseDto.java

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {

    private final String name;
    private final int amount;

}

 

- @Getter

      - 선언된 모든 필드의 get 메소드를 생성해 준다.

 

- @RequiredArgsConstructor

      - 선언된 모든  final 피륻가 포함된 생성자를 생성해 준다.

      - final이 없는 필드는 생성자에 포함되지 않는다.

 


적용된 롬복이 잘 작동하는지 테스트 코드를 작성 해보자

 

HelloResponseDtoTest.java

import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;

public class HelloResponseDtoTest {

    @Test
    public void 롬븍_기능_테스트() {
        // given
        String name = "test";
        int amount = 1000;

        // when
        HelloResponseDto dto = new HelloResponseDto(name, amount);

        //then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}​

- assertThat

      - assertj 라는 테스트 검증 라이브러리 메소드이다.

- isEqualTo

      - assertj의 동등 비교 메소드이다.

      - assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공이다.

 

 

테스트 메소드 결과

테스트 결과 정상적으로 기능이 수행된다. 

 

롬복의 @Getter로 get 메소드가, @RequiredArgsConstructor로 생성자가 자동 생성되는것을 확인할 수 있다.

 


 

JUnit의 기본 assertThat이 아닌 assertj의 assertThat을 사용한 이유는 다음 블로그를 참조하자.

https://www.daleseo.com/assertj/

 

AssertJ 소개

Engineering Blog by Dale Seo

www.daleseo.com

 

이제 HelloController에도 새로 만든 ResponseDto를 사용해보자. 

 

HelloController.java

@RestController
public class HelloController {
        @GetMapping("/hello")
        public String hello() {
                return "hello";
        }

        @GetMapping("/hello/dto")
        public HelloResponseDto helloDto(@RequestParam("name") String name, @RequestParam("amount") int amount) {
                return new HelloResponseDto(name, amount);
        }
}

 

- @RequestParam

      - 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션

      - @RequestParam("name")으로 넘긴 파라미터를 name(String name)에 저장하게 된다.

 

이제 추가된 API를 테스트하는 코드를 작성 해 보자.

 

HelloControllerTest.java

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void helloDTO가_리턴된다() throws Exception {
        String name = "hello";
        int amount = 1000;

        mvc.perform(get("/hello/dto")
                .param("name", name)
                .param("amount", String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.amount", is(amount)));
    }
}

 

- param

      - API를 테스트할 때 사용될 요청 파라미터를 설정(String만 허용)

 

- jsonPath

     - JSON 응답값을 필드별로 검증할 수 있는 메소드다.

     - $를 기준으로 필드명을 명시한다.

     

 

테스트 결과

JSON을 리턴하는 테스트가 통과하였다.

'공부 > Spring' 카테고리의 다른 글

스프링 부트에서 테스트 코드를 작성  (0) 2022.06.18