[Spring Boot] 롬복과 리팩터링

Updated:

Lombok 이란

목표 : 롬복을 활용하여 기존 코드를 리팩터링 하기

Lombok : 코드를 간소화시켜주는 라이브러리 getter(), setter(), constructor(), toString(), … 필수 메소드들을 사용하기 마련인데 이를 매번 작성하기는 좀 귀찮다.

Lombok의 기능

여러 필수 코드의 반복을 최소화 가능 리팩터링 할 수 있음

Refactoring

코드의 구조, 성능을 개선하는 작업

Logging

프로그램 수행 과정을 기록으로 남기는 것

실습

롬복 라이브러리 추가

프로젝트의 build.gradle 파일에 들어간다. dependencies 블럭에 라이브러리들을 추가해주면 된다.

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

코끼리 버튼 : 추가한 라이브러리를 인터넷으로 부터 다운 받아오는 것

14

잘 다운 받아졌으면 오른쪽 탭에 lombok이 추가

롬복 플러그인 설치

Help -> Find Action -> lombok 검색 후 설치

15

Preferences > Build, Execution, Deployment > Compiler > Annotation Processors

Enable annotation processing 체크

16

롬복 사용 준비 끄읕

실습 - DTO 리팩터링

ArticleForm.java

  • 기존 코드
package com.example.firstProject.dto;

import com.example.firstProject.entity.Article;

public class ArticleForm {

    private String title;
    private String content;

    public ArticleForm(String title, String content) {
        this.title = title;
        this.content = content;
    }

    @Override
    public String toString() {
        return "ArticleForm{" +
                "title='" + title + '\'' +
                ", content='" + content + '\'' +
                '}';
    }

    public Article toEntity() {
        return new Article(null, title, content);
    }
}

생성자를 지우고 아래 코드를 작성하면 생성자 코드를 작성한것과 똑같은 의미

@AllArgsConstructor

toString 메소드를 지우고 아래 코드를 작성하면 toString 코드를 작성한것과 같음

@ToString


  • 리팩터링 이후 코드
package com.example.firstProject.dto;

import com.example.firstProject.entity.Article;
import lombok.AllArgsConstructor;
import lombok.ToString;

@AllArgsConstructor
@ToString
public class ArticleForm {

    private String title;
    private String content;

    public Article toEntity() {
        return new Article(null, title, content);
    }
}

서버를 재실행하고 글을 작성해 submit 하면 이전 코드와 동일하게 작동하는 모습을 확인할 수 있다.

17

DB에도 잘 들어갔다.

18

실습 - ENTITY 리팩터링

동일하게 리팩터링 진행

  • 리팩터링 이후 코드
package com.example.firstProject.entity;

import lombok.AllArgsConstructor;
import lombok.ToString;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@AllArgsConstructor
@ToString
@Entity // DB가 해당 객체를 인식 가능
public class Article {

    @Id // 대표값을 지정, like 주민번호
    @GeneratedValue // 1, 2, 3, ... 자동 생성 어노테이션
    private Long id;

    @Column
    private String title;

    @Column
    private String content;
}

실습 - Controller 리팩토링(로그 남기기)

ArticleController.java

  • 기존 코드
System.out.println(form.toString()); 

// 1. Dto를 Entity로 변환
Article article = form.toEntity();
System.out.println(article.toString());

// 2. Repository에게 Entity를 DB 안에 저장하게 함
Article saved = articleRepository.save(article);
System.out.println(saved.toString());

println 으로 데이터를 확인하는 방식 : 실제 서버에서는 절대 하면 X

-> logging 기능으로 대체

logging 이란? 차량의 블랙박스처럼 서버에서 일어나는 일들, 내가 확인하고 싶은 일들을 기록할 수 있게 하는 것

사용법

@Slf4j

log.info(form.toString())


  • 리팩터링 이후 코드
log.info(form.toString());

// 1. Dto를 Entity로 변환
Article article = form.toEntity();
log.info(article.toString());

// 2. Repository에게 Entity를 DB 안에 저장하게 함
Article saved = articleRepository.save(article);
log.info(saved.toString());

서버 재실행 후 form submit

19

log를 확인해보니 잘 나온다!

20

리팩토링 이렇게 하는거구나 완전 편리하다…

참고

스프링 강의

Leave a comment