190 lines
5.2 KiB
Markdown
190 lines
5.2 KiB
Markdown
# **Lombok 어노테이션 정리 및 예제**
|
|
|
|
## **1. Lombok이란?**
|
|
Lombok은 **자바에서 반복적인 코드 작성을 줄여주는 라이브러리**이다.
|
|
특히, **Getter, Setter, 생성자, toString, equals, hashCode** 등의 메서드를 **자동으로 생성**해준다.
|
|
|
|
**✅ Lombok을 사용하면 다음과 같은 장점이 있다.**
|
|
✔ **코드가 간결해짐** (Getter, Setter, 생성자 등의 반복 코드 제거)
|
|
✔ **가독성이 향상됨** (핵심 로직만 보이므로 더 쉽게 이해 가능)
|
|
✔ **컴파일 타임에 코드가 자동 생성됨** (성능 저하 없음)
|
|
|
|
---
|
|
|
|
## **2. Lombok 주요 어노테이션 정리**
|
|
|
|
### **📌 클래스 관련 어노테이션**
|
|
| 어노테이션 | 설명 |
|
|
|---|---|
|
|
| `@Getter` | 모든 필드의 Getter 메서드 생성 |
|
|
| `@Setter` | 모든 필드의 Setter 메서드 생성 |
|
|
| `@ToString` | `toString()` 메서드 자동 생성 |
|
|
| `@EqualsAndHashCode` | `equals()` 및 `hashCode()` 자동 생성 |
|
|
| `@NoArgsConstructor` | 기본 생성자 자동 생성 |
|
|
| `@AllArgsConstructor` | 모든 필드를 포함한 생성자 자동 생성 |
|
|
| `@RequiredArgsConstructor` | `final` 또는 `@NonNull` 필드만 포함하는 생성자 생성 |
|
|
|
|
---
|
|
|
|
### **📌 필드 관련 어노테이션**
|
|
| 어노테이션 | 설명 |
|
|
|---|---|
|
|
| `@NonNull` | 필드가 `null`이 될 수 없도록 설정 (생성자에서 `null` 체크) |
|
|
| `@Value` | 불변(immutable) 클래스를 만들 때 사용 (`@Getter`, `@AllArgsConstructor`, `final` 자동 적용) |
|
|
|
|
---
|
|
|
|
### **📌 빌더 패턴 관련 어노테이션**
|
|
| 어노테이션 | 설명 |
|
|
|---|---|
|
|
| `@Builder` | 빌더 패턴을 자동 생성 |
|
|
| `@Singular` | `@Builder`에서 컬렉션(List, Set 등)을 초기화할 때 사용 |
|
|
|
|
---
|
|
|
|
### **📌 로깅 관련 어노테이션**
|
|
| 어노테이션 | 설명 |
|
|
|---|---|
|
|
| `@Slf4j` | `org.slf4j.Logger`를 자동 생성 |
|
|
| `@Log` | `java.util.logging.Logger`를 자동 생성 |
|
|
|
|
---
|
|
|
|
## **3. Lombok 어노테이션 예제**
|
|
|
|
### **✔ 1) Getter, Setter 자동 생성**
|
|
```java
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
@Getter
|
|
@Setter
|
|
public class User {
|
|
private String name;
|
|
private int age;
|
|
}
|
|
```
|
|
**🔹 사용 예시**
|
|
```java
|
|
User user = new User();
|
|
user.setName("홍길동");
|
|
user.setAge(30);
|
|
System.out.println(user.getName()); // 출력: 홍길동
|
|
```
|
|
✅ `getName()`, `setName()`, `getAge()`, `setAge()` 메서드가 자동 생성됨!
|
|
|
|
---
|
|
|
|
### **✔ 2) `@ToString` 자동 생성**
|
|
```java
|
|
import lombok.ToString;
|
|
|
|
@ToString
|
|
public class User {
|
|
private String name;
|
|
private int age;
|
|
}
|
|
```
|
|
**🔹 사용 예시**
|
|
```java
|
|
User user = new User();
|
|
user.setName("홍길동");
|
|
user.setAge(30);
|
|
System.out.println(user); // 출력: User(name=홍길동, age=30)
|
|
```
|
|
✅ `toString()`을 직접 작성할 필요 없음!
|
|
|
|
---
|
|
|
|
### **✔ 3) `@NoArgsConstructor`, `@AllArgsConstructor` 자동 생성**
|
|
```java
|
|
import lombok.NoArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
public class User {
|
|
private String name;
|
|
private int age;
|
|
}
|
|
```
|
|
**🔹 사용 예시**
|
|
```java
|
|
User user1 = new User(); // 기본 생성자 사용
|
|
User user2 = new User("홍길동", 30); // 모든 필드를 받는 생성자 사용
|
|
```
|
|
✅ **기본 생성자와 모든 필드를 포함한 생성자가 자동 생성됨!**
|
|
|
|
---
|
|
|
|
### **✔ 4) `@RequiredArgsConstructor` 사용 (final 필드만 포함)**
|
|
```java
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
@RequiredArgsConstructor
|
|
public class User {
|
|
private final String name;
|
|
private int age;
|
|
}
|
|
```
|
|
**🔹 사용 예시**
|
|
```java
|
|
User user = new User("홍길동"); // name 필드만 포함된 생성자
|
|
```
|
|
✅ **`final` 필드만 포함하는 생성자가 자동 생성됨!**
|
|
|
|
---
|
|
|
|
### **✔ 5) `@Builder`를 이용한 빌더 패턴**
|
|
```java
|
|
import lombok.Builder;
|
|
|
|
@Builder
|
|
public class User {
|
|
private String name;
|
|
private int age;
|
|
}
|
|
```
|
|
**🔹 사용 예시**
|
|
```java
|
|
User user = User.builder()
|
|
.name("홍길동")
|
|
.age(30)
|
|
.build();
|
|
System.out.println(user);
|
|
```
|
|
✅ **빌더 패턴이 자동 생성되어 `User.builder().name("홍길동").age(30).build();`로 객체 생성 가능!**
|
|
|
|
---
|
|
|
|
### **✔ 6) `@Slf4j`를 이용한 로그 출력**
|
|
```java
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@Slf4j
|
|
public class LogExample {
|
|
public static void main(String[] args) {
|
|
log.info("Hello, Lombok!");
|
|
}
|
|
}
|
|
```
|
|
**🔹 실행 결과**
|
|
```
|
|
INFO - Hello, Lombok!
|
|
```
|
|
✅ **Logger 객체를 직접 생성할 필요 없이 `log.info("Hello, Lombok!")`처럼 바로 사용 가능!**
|
|
|
|
---
|
|
|
|
## **4. Lombok 정리**
|
|
✔ **Lombok은 자바에서 반복적인 코드 작성을 줄여주는 라이브러리**
|
|
✔ **Getter, Setter, 생성자, toString, equals, hashCode 등을 자동 생성**
|
|
✔ **빌더 패턴 및 로깅도 쉽게 적용 가능**
|
|
✔ **코드를 간결하게 만들고 가독성을 향상시킴**
|
|
|
|
✅ **IDE에서 Lombok을 사용하려면?**
|
|
- **Lombok 라이브러리를 추가** (`pom.xml` 또는 `build.gradle`)
|
|
- **IntelliJ → Plugins에서 Lombok 플러그인 설치**
|
|
- **설정에서 "Enable annotation processing" 활성화** (`Settings > Build, Execution, Deployment > Compiler > Annotation Processors`)
|
|
|
|
✅ **Lombok을 사용하면 코드가 간결해지고, 유지보수가 편리해짐!** |