Lombok이란 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 Java의 라이브러리이다.
보통 Model, Entity의 경우 여러 속성이 존재하고, 이들의 속성들에 대해 Getter
Setter
등의 메소드를 반복해서 작성해줘야 하는 경우가 많다. Lombok은 이부분을 Annotation으로 대체하여 코드를 생성해준다.
Lombok을 이용해서 작성한 코드는 컴파일 과정에서 IDE가 Annotation
을 이용해서 코드를 생성하고, 그 코드가 .class
에 담기게 되는 것이다.
귀찮은 반복 작업을 줄여준다는 점에서 매우 편리하고, 많이 사용하지만 남용해서는 안된다. 다른 라이브러리와의 충돌이 발생할 수도 있고, 내가 원하는대로 동작하지 않을 수도 있기 때문이다.
예를들어 @Data
는 Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value 를 모두 만들어준다. 그러나 중요한 객체의 경우 @Getter
@Setter
와 같이 꼭 필요한 부분만 골라서 사용하는것이 좋다.
필드에 대한 getter
,setter
을 자동으로 생성해주는 Annotation이다.
아래와 같이 필드 이름이 id
라면, getId()
와 setId()
를 자동으로 생성해준다.
해당 클래스의 모든 필드에 대해 적용된다.
@Getter@Setter
public class Member {
private Long id;
//생략
}
생성자가 딱 하나만 존재하고 초기화되지 않은 모든 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;
//생략
}
@Getter
, @Setter
, @RequiredArgsConstructor
, @ToString
, @EqualsAndHashCode
, @Value
를 모두 포함하고 있다. 그러나 @Data
는 DTO객체와 같이 주요 로직에 영향을 끼치지 않는 데이터에만 사용하는것이 좋다.
편리하지만, 사용하지 않는게 좋다.
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 } }