[Java] Lombok 롬복

HSRyuuu dev blog·2023년 4월 12일
0

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. @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
	}
}
profile
Exciting dev life / 댓글, 피드백, 질문 환영합니다 !!!

0개의 댓글