롬복이란

롬복을 활용해 리펙터링 하기

1. 롬복 설치하기

dependencies {
  //lombok 코드 추가
	compileOnly 'org.projectlombok:lombok' 
	annotationProcessor 'org.projectlombok:lombok'

	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-mustache'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	runtimeOnly 'com.h2database:h2'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Untitled

2. DTO 리팩터링하기

import lombok.AllArgsConstructor; // AllArgsConstructor 패키지 자동 임포트
import lombok.ToString; // ToString 패키지 자동 임포트

@AllArgsConstructor // 새 어노테이션 추가
@ToString // 새 어노테이션 추가
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 "Article{" +~~
                ~~"id=" + id +~~
                ~~", title='" + title + '\\'' +~~
                ~~", content='" + content + '\\'' +~~
                ~~'}';~~
    }
}

3. 엔티티 리팩터링하기

package com.example.firstproject.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.ToString;

@AllArgsConstructor // Article() 생성자를 대체하는 어노테이션 추가
@ToString // toString() 생성자를 대체하는 어노테이션 추가
@Entity
public class Article {
		(중략)
		~~public Article(Long id, String title, String content) {~~ // 생성자 삭제
			(중략)
		~~@Override (중략)~~ // 메소드 삭제

    @Id
    @GeneratedValue
    private Long id;

    @Column
    private String title;

    @Column
    private String content;
}

4. 컨트롤러에 로그 남기기

package com.example.firstproject.controller;

import com.example.firstproject.dto.ArticleForm;
import com.example.firstproject.entity.Article;
import com.example.firstproject.repository.ArticleRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Slf4j // 로깅 기능을 위한 어노테이션 추가
@Controller
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;

    @GetMapping("/articles/new")
    public String newArticleForm() {
        return "articles/new";
    }

    @PostMapping("/articles/create")
    public String createArticle(ArticleForm form) {
        log.info(form.toString()); // 로깅 코드 추가
        // System.out.println(form.toString()); 기존 println()문 주석 처리

        // 1. DTO를 엔티티로 변환
        Article article = form.toEntity();
        log.info(article.toString()); // 로깅 코드 추가
        // System.out.println(article.toString()); 기존 println()문 주석 처리

        // 2. 리파지터리로 엔티티를 DB에 저장
        Article saved = articleRepository.save(article); 
        log.info(saved.toString()); // 로깅 코드 추가
        // System.out.println(saved.toString()); 기존 println()문 주석 처리
 
        return "";
    }
}

Untitled

Untitled

마무리

  1. 롬복
  2. 로깅