[Spring] Lombok 이해하기카테고리 없음2024. 1. 4. 11:21
Table of Contents
Lombok이란?
- Java의 라이브러리 중 한 종류로, 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브러리 입니다.
- 쉽게 와닿지 않으니, 바로 코드로 확인해봅시다.
Lombok 없는 코드
package com.example.lombok.dto;
public class UserDTO {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 여기 UserDTO 라는 클래스가 있습니다.
- 클래스에는, id, name 이라는 변수들이 존재하고, 이를 설정과 반환하는 get~, set~의 메서드들이 존재합니다.
- 써줄게 너무 많습니다.
만약 Lombok을 사용한다면?
package com.example.lombok.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserDTO {
private String id;
private String name;
}
- 위에, @Getter, @Setter 어노테이션만 추가해주게 되면,
- Gradle dependencies에서, Lombok의 경우 compileOnly 였던 것 기억 나시죠?
- 컴파일 시 Lombok이 알아서 get~, set~ 메서드들을 생성해주게 됩니다.’
- 간결한 코드 작성이 가능해집니다.
<aside> 💡 @Getter, @Setter만 존재하는 것이 아니고, 여러 다양한 옵션들이 존재하니 하단 링크를 참고하세요.
</aside>
Lombok이 작동하는 원리?
- **@Getter**와 같은 Lombok 어노테이션은 코드를 자동으로 생성하는 기능을 제공합니다. 이러한 어노테이션을 사용하면 필드에 대한 Getter 메서드를 자동으로 생성할 수 있습니다. 아래는 @Getter 어노테이션의 내부 동작 원리를 자세히 설명합니다.
- Lombok은 Java 컴파일러의 Annotation Processing Tool (APT)를 사용하여 코드를 생성합니다. 어노테이션 프로세서는 소스 코드를 스캔하고, 특정 어노테이션이 적용된 요소를 찾아서 코드를 생성하는 역할을 합니다. 이 때, @Getter 어노테이션이 적용된 필드에 대한 Getter 메서드를 생성하게 됩니다.
- 다음은 @Getter 어노테이션이 적용된 필드에서 Getter 메서드를 생성하는 간단한 예제입니다. 이 예제에서는 name 필드에 @Getter 어노테이션이 적용되어 Getter 메서드를 생성합니다.
import lombok.Getter;
public class Person {
@Getter
private String name;
}
Lombok이 코드를 생성하는 과정은 다음과 같습니다:
- 소스 코드 컴파일 시, Lombok 어노테이션 프로세서가 활성화됩니다.
- Lombok 어노테이션 프로세서는 Person 클래스를 스캔하고 @Getter 어노테이션이 적용된 필드를 찾습니다.
- @Getter 어노테이션에 의해 Getter 메서드의 이름 및 리턴 타입이 결정됩니다. 일반적으로 필드 이름에서 첫 글자를 대문자로 하고, 필드 타입이 메서드의 리턴 타입이 됩니다.
- Lombok은 Person 클래스에 필드 이름인 **name**에 대한 Getter 메서드를 자동으로 생성하고, 이 메서드를 컴파일된 클래스에 추가합니다.
실제로 Lombok이 생성한 코드는 컴파일된 클래스 파일에 포함되므로, 개발자는 이 코드를 직접 작성하지 않아도 Getter 메서드를 사용할 수 있습니다. 이렇게 Lombok은 코드 생성을 통해 개발자의 생산성을 높이고 반복적인 작업을 줄여줍니다.
참고 자료
https://jiurinie.tistory.com/20
https://hudi.blog/java-reflection/
@찐빵1 :: 위기주도학습
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!