개인토이 프로젝트를 진행하면서 마주치는 여러 Lombok 어노테이션들을 보며 어떠한 어노테이션들이 존재하고 정확히 롬복은 어떤것인지 궁금하여 작성하게 되었습니다.
Lombok 이란?
Lombok은 Java 개발에서 반복적으로 작성해야 하는 코드를 자동으로 생성해주는 라이브러리라고 합니다.
주로 @Getter @Setter @ToString 등 자주 작성하는 메서드와 생성자를 자동으로 생성해 코드의 간결성을 높이고, 유지보수를 용이하게 해주었고. 이미 Java의 생산성을 크게 향상시킬 수 있는 도구로 널리 사용되고 있습니다.
Lombok의 주요 특징
- 코드 간결화
- 자주 반복되는 보일러플레이트 코드(예: getter, setter, toString, 생성자 등)를 자동으로 생성하여 코드량을 줄이고 가독성을 높입니다.
- 유지보수 용이
- 필드가 추가되거나 변경되더라도 관련 메서드를 일일이 수정할 필요가 없어 유지보수가 간단합니다.
- 어노테이션 기반 동작
- 어노테이션 하나로 필요한 메서드와 생성자를 생성하므로 직관적입니다.
- 컴파일 시점 처리
- 컴파일 타임에 코드를 자동으로 생성하여 런타임 성능에 영향을 미치지 않습니다.
Lombok 주요 어노테이션
1. Getter와 Setter 생성
- @Getter: 클래스의 모든 필드에 getter 메서드를 생성합니다.
- @Setter: 클래스의 모든 필드에 setter 메서드를 생성합니다.
public class User {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
롬복 미사용 코드
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
롬복 사용 코드
2. 생성자 자동 생성
- @NoArgsConstructor: 파라미터가 없는 기본 생성자 생성.
- @AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자 생성.
- @RequiredArgsConstructor: final 또는 @NonNull 필드만 초기화하는 생성자 생성.
public class User {
private String name;
private int age;
private String email;
// 기본 생성자
public User() {}
// 모든 필드를 초기화하는 생성자
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// @NonNull 필드만 초기화하는 생성자
public User(String email) {
if (email == null) {
throw new NullPointerException("email is marked @NonNull but is null");
}
this.email = email;
}
}
롬복 미사용 코드
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.NonNull;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private String name;
private int age;
@NonNull
private String email;
}
롬복 사용 코드
3. toString 및 Equals/HashCode
- @ToString: toString() 메서드 생성.
- @EqualsAndHashCode: 객체의 동등성 비교를 위한 equals()와 hashCode() 메서드 생성.
public class User {
private String name;
private int age;
private String email;
// toString() 메서드
@Override
public String toString() {
return "User(name=" + name + ", age=" + age + ", email=" + email + ")";
}
// equals() 메서드
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age &&
(name != null ? name.equals(user.name) : user.name == null) &&
(email != null ? email.equals(user.email) : user.email == null);
}
// hashCode() 메서드
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
result = 31 * result + (email != null ? email.hashCode() : 0);
return result;
}
}
롬복 미사용 코드
4. builder 패턴 지원
- @Builder: 객체 생성 시 빌더 패턴을 지원합니다.
5. 로깅 지원
- @Slf4j: SLF4J 기반의 로거를 자동으로 추가.
Lombok의 장점과 단점
장점
- 코드량 감소로 가독성 향상.
- 반복적인 작업을 줄여 생산성 증가.
- 컴파일 타임에 코드 생성으로 성능 저하 없음.
단점
- IDE 설정이 필요하며, 설정이 없으면 컴파일 오류 발생 가능.
- 코드 가독성이 높아지지만, 자동 생성된 코드는 IDE에서 명시적으로 보이지 않아 디버깅 시 혼란이 있을 수 있음.
- 특정 프로젝트에서는 Lombok 의존성을 제거하기 어려울 수 있음.
이로써 Lombok 에 대해 알아보았다.
롬복의 탄생 배경
사용 전과 사용 후의 코드비교
특징등을 통해 롬복의 장단점에 대해 기억하고
롬복을 왜써야하는지
어떤것이 장점이고 어떤것이 단점인지
알고 쓰도록하자.
'Spring' 카테고리의 다른 글
Stream (3) | 2024.09.02 |
---|---|
SOLID 객체지향설계 5원칙 (0) | 2024.01.31 |