JAVA & Spring/Java Library

[Java / Spring] Lombok 롬복

HSRyuuu 2023. 5. 4. 00:18

Lombok이란?

Lombok이란 반복되는 메서드를 Annotation을 사용해서 자동으로 작성해 주는 Java의 라이브러리이다.

보통 Model, Entity의 경우 여러 속성이 존재하고, 이들의 속성들에 대해 Getter Setter 등의 메서드를 반복해서 작성해줘야 하는 경우가 많다. Lombok은 이 부분을 Annotation으로 대체하여 코드를 생성해 준다. Lombok을 이용해서 작성한 코드는 컴파일 과정에서 IDE가 Annotation을 이용해서 코드를 생성하고, 그 코드가. class에 담기게 되는 것이다.

 

귀찮은 반복 작업을 줄여준다는 점에서 매우 편리하고, 많이 사용하지만 남용해서는 안된다. 다른 라이브러리와의 충돌이 발생할 수도 있고, 내가 원하는 대로 동작하지 않을 수도 있기 때문이다.

 

예를 들어 @Data는 Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value를 모두 만들어준다. 그러나 중요한 객체의 경우 @Getter @Setter와 같이 꼭 필요한 부분만 골라서 사용하는 것이 좋다.


Annotations

1. @Getter , @Setters

필드에 대한 getter,setter을 자동으로 생성해 주는 Annotation이다.
아래와 같이 필드 이름이 id 라면, getId()와 setId()를 자동으로 생성해 준다.
해당 클래스의 모든 필드에 대해 적용된다.

@Getter@Setter
public class Member {

    private Long id;

    //생략
}

2. @RequiredArgsConstructor

생성자가 딱 하나만 존재하고 초기화되지 않은 모든 final 필드에 대해 생성자를 만들어준다.

만약 아래와 같은 controller가 있을 때

@Controller
@RequestMapping("/board")
public class BoardController {

    private final MemberRepository memberRepository;
    private final PostRepository postRepository;

    @Autowired
    public BoardController(MemberRepository memberRepository, PostRepository postRepository){
        this.memberRepository = memberRepository;
        this.postRepository = postRepository;
    }
//생략
}

아래와 같이 롬복을 이용하여 단순화할 수 있다.

@Controller
@RequestMapping("/board")
@RequiredArgsConstructor
public class BoardController {
    private final MemberRepository memberRepository;
    private final PostRepository postRepository;
    //생략
}

3. @AllArgsConstructor, @NoArgsConstructor

각각 모든 필드를 매개변수로 갖는 생성자, 매개변수가 없는 기본 생성자를 자동 생성한다.

@AllArgsConstructor
@NoArgsConstructor
public class Member{
	private Long id;
    private String name;
    
    //@NoArgsConstructor가 아래 코드를 만들어 줌.
    public Member(){}
    
    //@AllArgsConstructor가 아래 코드를 만들어 줌.
    public Member(Long id, String name){
    	this.id = id;
        this.name = name;
    }
}

4. @ToString, @EqualsAndHashCode

기본적인  toString()가 equals(), hashCode() 메서드를 생성해 준다.


5. @Data

@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode, @Value를 모두 포함하고 있다. 그러나 @Data는 DTO객체와 같이 주요 로직에 영향을 끼치지 않는 데이터에만 사용하는 것이 좋다.

편리하지만, 사용하지 않는 게 좋다.

  • @Data 어노테이션을 생성한 뒤 정보를 보면, 위에 포함되어 있는 어노테이션들을 볼 수 있다.
  • 그중에 골라서 사용하는 것이 좋다.

사용 세팅

IntelliJ 사용 세팅
settings - annotation processors - Enable annotation processing check

 

build.gradle dependencies에 추가

 compileOnly 'org.projectlombok:lombok'
 annotationProcessor 'org.projectlombok:lombok'

build.gradle에 추가

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
반응형