add bash scripts for git operations and Lombok documentation
This commit is contained in:
267
docs/lombok.md
Normal file
267
docs/lombok.md
Normal file
@@ -0,0 +1,267 @@
|
||||
자바의 Lombok에 대해 설명하는 글을 작성하겠습니다. Lombok은 자바에서 반복적인 코드를 줄여주는 라이브러리로, 어노테이션을 활용해 Boilerplate 코드(예: Getter, Setter, 생성자 등)를 자동으로 생성해줍니다. 이를 통해 코드 가독성을 높이고 개발 생산성을 향상시킬 수 있습니다.
|
||||
|
||||
먼저, Lombok에서 제공하는 주요 어노테이션을 표 형식으로 정리한 뒤, 각 어노테이션에 대해 설명과 예시를 상세히 다루겠습니다.
|
||||
|
||||
---
|
||||
|
||||
### Lombok 주요 어노테이션 표
|
||||
|
||||
| 어노테이션 | 설명 |
|
||||
|-----------------------|----------------------------------------------------------------------|
|
||||
| `@Getter` | 필드에 대해 Getter 메서드를 자동 생성 |
|
||||
| `@Setter` | 필드에 대해 Setter 메서드를 자동 생성 |
|
||||
| `@ToString` | 클래스의 toString() 메서드를 자동 생성 |
|
||||
| `@EqualsAndHashCode` | equals()와 hashCode() 메서드를 자동 생성 |
|
||||
| `@NoArgsConstructor` | 매개변수가 없는 기본 생성자를 자동 생성 |
|
||||
| `@AllArgsConstructor`| 모든 필드를 매개변수로 받는 생성자를 자동 생성 |
|
||||
| `@RequiredArgsConstructor` | `@NonNull`이 붙은 필드나 final 필드만 매개변수로 받는 생성자를 생성 |
|
||||
| `@Data` | `@Getter`, `@Setter`, `@ToString`, `@EqualsAndHashCode`, `@RequiredArgsConstructor`를 포함 |
|
||||
| `@Builder` | 빌더 패턴을 구현한 코드를 자동 생성 |
|
||||
| `@Slf4j` | SLF4J 로깅 프레임워크를 위한 Logger 객체를 자동 생성 |
|
||||
| `@NonNull` | 필드나 매개변수가 null이 될 수 없음을 명시 |
|
||||
|
||||
---
|
||||
|
||||
### 각 어노테이션 상세 설명 및 예시
|
||||
|
||||
#### 1. `@Getter`
|
||||
- **설명**: 각 필드에 대해 Getter 메서드를 자동으로 생성합니다. 클래스의 모든 필드에 적용하려면 클래스 레벨에 붙일 수도 있습니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class Person {
|
||||
private String name = "홍길동";
|
||||
private int age = 30;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person();
|
||||
System.out.println(person.getName()); // "홍길동" 출력
|
||||
System.out.println(person.getAge()); // 30 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. `@Setter`
|
||||
- **설명**: 각 필드에 대해 Setter 메서드를 생성합니다. 클래스 레벨에서도 사용 가능하며, 특정 필드에만 적용하려면 필드 위에 붙입니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.Setter;
|
||||
|
||||
@Setter
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person();
|
||||
person.setName("김영희");
|
||||
person.setAge(25);
|
||||
System.out.println(person); // toString 없으므로 객체 참조 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. `@ToString`
|
||||
- **설명**: 클래스의 필드를 기반으로 `toString()` 메서드를 생성합니다. 기본적으로 모든 필드를 포함하며, 제외하고 싶은 필드는 `@ToString.Exclude`를 사용합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.ToString;
|
||||
|
||||
@ToString
|
||||
public class Person {
|
||||
private String name = "이철수";
|
||||
private int age = 40;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person();
|
||||
System.out.println(person); // Person(name=이철수, age=40) 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 4. `@EqualsAndHashCode`
|
||||
- **설명**: `equals()`와 `hashCode()` 메서드를 필드 기반으로 생성합니다. 특정 필드를 제외하려면 `@EqualsAndHashCode.Exclude`를 사용합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode
|
||||
public class Person {
|
||||
private String name = "박민수";
|
||||
private int age = 28;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person p1 = new Person();
|
||||
Person p2 = new Person();
|
||||
System.out.println(p1.equals(p2)); // true 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 5. `@NoArgsConstructor`
|
||||
- **설명**: 매개변수가 없는 기본 생성자를 생성합니다. 주로 JPA나 프레임워크에서 요구될 때 사용됩니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
public class Person {
|
||||
private String name = "최수진";
|
||||
private int age;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person(); // 기본 생성자 호출
|
||||
System.out.println(person.name); // "최수진" 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 6. `@AllArgsConstructor`
|
||||
- **설명**: 모든 필드를 매개변수로 받는 생성자를 생성합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person("김지영", 33);
|
||||
System.out.println(person.name); // "김지영" 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 7. `@RequiredArgsConstructor`
|
||||
- **설명**: `@NonNull`이 붙은 필드나 `final` 필드만 포함한 생성자를 생성합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class Person {
|
||||
@NonNull private String name;
|
||||
private int age; // 포함되지 않음
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person("윤서진"); // name만 요구됨
|
||||
System.out.println(person.name); // "윤서진" 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 8. `@Data`
|
||||
- **설명**: `@Getter`, `@Setter`, `@ToString`, `@EqualsAndHashCode`, `@RequiredArgsConstructor`를 모두 포함하는 편리한 어노테이션입니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person();
|
||||
person.setName("이정훈");
|
||||
person.setAge(29);
|
||||
System.out.println(person); // Person(name=이정훈, age=29) 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 9. `@Builder`
|
||||
- **설명**: 빌더 패턴을 구현한 코드를 생성합니다. 객체를 유연하게 생성할 때 유용합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.Builder;
|
||||
|
||||
@Builder
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = Person.builder()
|
||||
.name("최영미")
|
||||
.age(35)
|
||||
.build();
|
||||
System.out.println(person.name); // "최영미" 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 10. `@Slf4j`
|
||||
- **설명**: SLF4J 기반의 Logger 객체를 자동 생성합니다. 로깅 코드를 간소화할 수 있습니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class Person {
|
||||
private String name = "김태양";
|
||||
|
||||
public void printName() {
|
||||
log.info("Name: {}", name);
|
||||
}
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person();
|
||||
person.printName(); // INFO: Name: 김태양 출력
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 11. `@NonNull`
|
||||
- **설명**: 필드나 매개변수가 null이 될 수 없음을 명시하며, null 체크 코드를 생성합니다. 주로 `@RequiredArgsConstructor`와 함께 사용됩니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import lombok.NonNull;
|
||||
|
||||
public class Person {
|
||||
private final String name;
|
||||
|
||||
public Person(@NonNull String name) {
|
||||
this.name = name; // null이면 예외 발생
|
||||
}
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Person person = new Person("박준영"); // 정상 동작
|
||||
// Person nullPerson = new Person(null); // NullPointerException 발생
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 결론
|
||||
Lombok은 자바 개발에서 반복적인 코드를 줄이고, 가독성과 유지보수성을 높이는 데 큰 도움을 줍니다. 위 어노테이션들을 적절히 활용하면 생산성을 크게 향상시킬 수 있습니다. 단, 프로젝트에서 Lombok을 사용할 때는 팀원 모두가 이를 이해하고 IDE 설정(플러그인 설치 등)이 제대로 되어 있어야 원활한 협업이 가능합니다.
|
||||
|
||||
궁금한 점이 더 있다면 언제든 물어보세요!
|
||||
Reference in New Issue
Block a user