메이븐 프로젝트에 적용하는 방법은 아래 글 참고
2020/10/31 - [Spring/Spring Boot] - Spring Boot, Maven 프로젝트에 롬복 적용하기
롬복(Lombok) 이란?
롬복(lombok)을 이용하면 getter, setter, constructor 를 매번 생성할 필요가 없다.
롬복은 @Getter, @Setter, @NoArgsConstructor 등등 어노테이션을 추가해주는 것으로 접근 제어자, 생성자 등등 자동으로 생성해준다.
Java 의 축복이라 할 수 있을 정도로 매우 편리하여 여러 개발자들이 많이 사용한다.
Dependency 추가
롬복(lombok) 사이트에 gradle 환경에서 dependency를 추가하는 방법이 소개되어 있다.
https://projectlombok.org/setup/gradle
build.gradle 에 아래 코드를 추가한다.
본 글에서는 플러그인 없이 Gradle에서 사용하는 방법을 이용한다.
플러그인방식으로 하고싶은 경우, https://plugins.gradle.org/plugin/io.freefair.lombok을 참고한다
dependencies {
...
// https://projectlombok.org/setup/gradle
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'
testCompileOnly 'org.projectlombok:lombok:1.18.12'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
...
}
사용방법
대표적으로 많이 사용하는 @Getter
, @Setter
, @ToString
, @Data
, @NoArgsConstructor
, @Slf4j
등이 있다.
인텔리제이 플러그인 설치
자동으로 생성해주지만, 코드를 작성할때 IDE는 해당 메소드를 찾지 못한다. 그래서 롬복 플러그인 설치가 필요하다.
@Getter 와 @Setter
@Getter
@Setter
public class Board {
private long id;
private String title;
private String author;
private String body;
private Date createDate;
private Date updateDate;
}
- @Getter: 각 멤버 변수의
getter
메소드를 생성해준다. - @Setter: 각 멤버 변수의
setter
메소드를 생성해준다.
만약 boolen 타입의 멤버 변수를 사용하는 경우, getXXX()가 아니라 isXXX()로 생성된다.
@ToString
@ToString
@Getter @Setter
public class Board {
private long id;
private String title;
private String author;
private String body;
private Date createDate;
private Date updateDate;
}
이제 매번 toString
메소드를 오버라이드(override
) 할 필요가 없다. 이제는 @ToString 어노테이션을 사용하자.
final Board board = new Board();
board.setId(1);
// ... 생략 ...
log.debug(board.toString());
Board(id=1, title=testTitle, author=testAuthor, body=testBody, createDate=Sun Mar 08 00:19:25 KST 2020, updateDate=Sun Mar 08 00:19:25 KST 2020)
@Data
@Data 어노테이션을 사용하면 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 모두 생성해준다. (하지만, 사용하는것은 지양하자)
@Data
public class Board {
private long id;
private String title;
private String author;
private String body;
private Date createDate;
private Date updateDate;
}
아니 이렇게 강력하고 좋은 걸 왜 지양하지? 이렇게 생각할 수 있다.
결론부터 얘기하면 너무 강력하기 때문에 무분별하게 Setter가 남용된다. 접근 권한에 제한이 없어지기 때문에 변경되면 안되는 값이 변경될 수 있는 가능성이 생긴다. (객체의 안정성을 보장하지 못한다)
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot, 간단한 REST API 만들기 (0) | 2020.10.31 |
---|---|
SpringBoot 서버 포트 변경하기 (0) | 2020.10.31 |
Gradle 환경에서 Spring Boot 에 Swagger 2 적용하기 (0) | 2020.03.07 |
Spring Boot 프로젝트 생성하기 (0) | 2020.02.18 |
Spring Boot에 Swagger2 (스웨거) 적용하기 (Maven) (0) | 2020.02.18 |