지금까지 살펴본 것은 모두 소스코드에서 컴파일 완료된 .class 파일을 변경하여 사용하는 방법을 알아봤었다. 그렇다면, 컴파일 되기 전에 자바 소스코드 -> 컴파일 사이에 아예 조작하는 방법은 없을까?
-> lombok 이 그 대표적인 예시가 된다.
1. Lombok?
lombok 라이브러리는 보통 객체를 만들고 나서 자주 구현하게 되는 getters, setters, equals, hashCodes 와 같은 매소드들을 @Getter, @Setter, @EqualsAndHashCodes 과 같은 어노테이션과 어노테이션 프로세스를 제공하여 표준적으로 작성해야할 코드를 개발자 대신 생성해준다.
package me.flash.annotationprocessor;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "customer")
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
private String userName;
public User() {
}
public User(String name) {
this.userName = name;
}
}
class UserTest {
@Test
void getUserNameTest() {
User user = new User();
user.setUserName("flash");
assertThat(user.getUserName()).isEqualTo("flash");
}
}
//User.class file : annotation 에 의해서 자동으로 생성된 getters and setters
public class User {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long userId;
private String userName;
public User() {
}
public User(String name) {
this.userName = name;
}
public Long getUserId() {
return this.userId;
}
public String getUserName() {
return this.userName;
}
public void setUserId(final Long userId) {
this.userId = userId;
}
public void setUserName(final String userName) {
this.userName = userName;
}
}