memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

메이븐 프로젝트에 적용하는 방법은 아래 글 참고

2020/10/31 - [Spring/Spring Boot] - Spring Boot, Maven 프로젝트에 롬복 적용하기

 

Spring Boot, Maven 프로젝트에 롬복 적용하기

Gradle 프로젝트에 롬복 적용하는 방법은 아래 글 참고 2020/03/07 - [Spring/Spring Boot] - Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용 Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용..

memostack.tistory.com

 

롬복(Lombok) 이란?

롬복(lombok)을 이용하면 getter, setter, constructor 를 매번 생성할 필요가 없다.

롬복은 @Getter, @Setter, @NoArgsConstructor 등등 어노테이션을 추가해주는 것으로 접근 제어자, 생성자 등등 자동으로 생성해준다.

 

Java 의 축복이라 할 수 있을 정도로 매우 편리하여 여러 개발자들이 많이 사용한다.

Dependency 추가

롬복(lombok) 사이트에 gradle 환경에서 dependency를 추가하는 방법이 소개되어 있다.

 

https://projectlombok.org/setup/gradle

플러그인 없이 Gradle에서 롬복(lombok) 사용하기

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가 남용된다. 접근 권한에 제한이 없어지기 때문에 변경되면 안되는 값이 변경될 수 있는 가능성이 생긴다. (객체의 안정성을 보장하지 못한다)

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!