728x90
반응형
Lombok(롬복) 이란?
반복되는 메서드를 Annotation(어노테이션)을 사용해 자동으로 작성해 주는 라이브러리.
보통 Getter / Setter 를 주로 사용.
Lombok 설치
IntelliJ
플러그인에서 lombok 설치 후
Settings(win)/preference(mac) - 검색에 annotation processors - Enable annotation processing 체크
dependencies
// gradle - build.gradle
dependencies {
...
// lombok 라이브러리 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//
...
}
// maven - pom.xml
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
</dependencies>
주로 사용하는 어노테이션
@Getter / @Setter
// lombok 적용시
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
- User 클래스는 getName(), setName(), getAge(), setAge() 메서드를 가지게 된다.
@ToString
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
@EqualsAndHashCode
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
- User 클래스에 대해 eqauls()와 hashCode() 메서드를 자동으로 생성하고 객체비교와 해시코드를 생성
@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.NonNull;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
@NonNull private String name;
private int age;
}
- @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성
- @AllArgsConstructor: 모든 필드를 포함하는 생성자를 생성
- @RequiredArgsConstructor: final 또는 @NonNull이 붙은 필드만 포함하는 생성자를 생성
@Data
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
- @Data는 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 모두 포함하는 종합 어노테이션
@Builder
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
// 사용 예시
User user = User.builder()
.name("Alice")
.age(30)
.build();
롬복 미사용 시 코드
더보기
public class User {
private String name;
private int age;
// 기본 생성자
public User() {}
// 모든 필드를 포함하는 생성자
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter 및 setter 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// toString 메서드
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
// equals 및 hashCode 메서드
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (age != user.age) return false;
return name != null ? name.equals(user.name) : user.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
// 빌더 패턴 구현
public static class Builder {
private String name;
private int age;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public User build() {
return new User(name, age);
}
}
public static Builder builder() {
return new Builder();
}
}
// 위와 같은 코드 사용시 User 클래스 사용방법
// 객체 생성 예시
User user1 = new User("Alice", 30);
// getter 및 setter 호출 예시
System.out.println(user1.getName()); // "Alice"
user1.setAge(31);
System.out.println(user1.getAge()); // 31
// toString 메서드 호출 예시
System.out.println(user1.toString()); // "User{name='Alice', age=31}"
// equals 및 hashCode 메서드 호출 예시
User user2 = new User("Alice", 31);
System.out.println(user1.equals(user2)); // true
// 빌더 패턴을 통한 객체 생성 예시
User user3 = User.builder()
.name("Bob")
.age(25)
.build();
System.out.println(user3.toString()); // "User{name='Bob', age=25}"
단점
- @Data 같은 어노테이션은 기본적으로 모든 것을 생성하기 때문에 필요하지 않은 메서드도 생성되며 프로그램이 무거워질 수 있다.
- 구조파악이나 협업 시 롬복을 모르면 파악이 힘들 수도 있다.
- 고로 @Getter / @Setter 정도만 사용하는 것이 협업에선 좋을 수 도 있다.
하지만 요즘 툴에선 생성자나 게터쎄터 단축키가 있어서 일일이 치지 않아도 생성되기 때문에 적절히 사용하면 될 것 같다.
728x90
반응형
'개발 > JAVA' 카테고리의 다른 글
JAVA-ORACLE 연동 feat.IntelliJ (0) | 2024.05.14 |
---|---|
문자열 비교, ==와 equals() 그리고 compareTo() (0) | 2024.05.07 |
[annotation] @Autowired와 @Qualifier (0) | 2024.04.24 |
25. JAVA JDBC (Java Database Connectivity) - 3 (0) | 2020.06.08 |
24. JAVA JDBC (Java Database Connectivity) - 2 (0) | 2020.06.08 |