[Spring Boot] 롬복과 리팩터링
Updated:
Lombok 이란
목표 : 롬복을 활용하여 기존 코드를 리팩터링 하기
Lombok : 코드를 간소화시켜주는 라이브러리 getter(), setter(), constructor(), toString(), … 필수 메소드들을 사용하기 마련인데 이를 매번 작성하기는 좀 귀찮다.
Lombok의 기능
여러 필수 코드의 반복을 최소화 가능 리팩터링 할 수 있음
Refactoring
코드의 구조, 성능을 개선하는 작업
Logging
프로그램 수행 과정을 기록으로 남기는 것
실습
롬복 라이브러리 추가
프로젝트의 build.gradle 파일에 들어간다. dependencies 블럭에 라이브러리들을 추가해주면 된다.
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
코끼리 버튼 : 추가한 라이브러리를 인터넷으로 부터 다운 받아오는 것
잘 다운 받아졌으면 오른쪽 탭에 lombok이 추가
롬복 플러그인 설치
Help -> Find Action -> lombok 검색 후 설치
Preferences > Build, Execution, Deployment > Compiler > Annotation Processors
Enable annotation processing 체크
롬복 사용 준비 끄읕
실습 - 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 하면 이전 코드와 동일하게 작동하는 모습을 확인할 수 있다.
DB에도 잘 들어갔다.
실습 - 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
log를 확인해보니 잘 나온다!
리팩토링 이렇게 하는거구나 완전 편리하다…
Leave a comment