롬복이란
- 롬복(lombok): 코드를 간소화해 주는 라이브러리
- 로깅(logging): 프로그램의 수행 과정을 기록으로 남기는 것
- 리팩터링(refactoring): 코드의 기능은 변함 없이 코드의 구조 또는 성능을 개선하는 작업
롬복을 활용해 리펙터링 하기
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'
}
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 "";
}
}
마무리
- 롬복
- 코드를 간소화해 주는 라이브러리
- 여러 필수 코드가 반복되는 것을 최소화 & println()문을 로깅 기능으로 대체 가능
- 로깅