๐[Spring] @AllArgsConstructor
์ ๋ฌด์์ผ๊น์?
๐ Intro.
- โ๏ธ
@AllArgConstructor
๋ Lombok์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก ๋ชจ๋ ํ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํด ์ค.
โ 1๏ธโฃ ์ฃผ์ ํน์ง.
1. ๋ชจ๋ ํ๋๋ฅผ ํฌํจํ ์์ฑ์ ์ถ๊ฐ.
- โ๏ธ ํด๋์ค์ ์ ์ธ๋ ๋ชจ๋ ํ๋๋ฅผ ์ด๊ธฐํํ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํจ.
- โ๏ธ ์๋์ผ๋ก ์์ฑ์๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ฏ๋ก ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง.
2. ์ฃผ๋ก ๊ฐ์ฒด ์์ฑ์ ์ฌ์ฉ.
- โ๏ธ ์์กด์ฑ ์ฃผ์ , DTO ํด๋์ค ์์ฑ ๋ฑ ๊ฐ์ฒด ์์ฑ ์ ํ๋๋ฅผ ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํจ.
3. Builder ํจํด๊ณผ ํธํ.
- โ๏ธ
@AllArgsConstructor
๋ ์ฃผ๋ก Builder ํจํด๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ๊ฐ์ฒด ์ด๊ธฐํ ๋ฐฉ์์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
โ 2๏ธโฃ ์ฌ์ฉ ์์ .
1. ๊ธฐ๋ณธ ์ฌ์ฉ.
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class MyClass {
private String name;
private int age;
}
- โ๏ธ ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํจ.
public MyClass(String name, int age) { this.name = name; this.age = age; }
2. ์ํฐํฐ ํด๋์ค์์์ ์ฌ์ฉ.
- โ๏ธ JPA์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํ๋๋ ์ํฐํฐ ํด๋์ค์์ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ ๋ ์ ์ฉํจ.
```java
import jakarta.persistence.Entity;
import lombok.AllArgsConstructor;
@Entity
@AllArgsConstructor
public class User {
private Long id;
private String username;
private String email;
}
- โ๏ธ ์ ์์ฑ์๋ฅผ ํตํด ์ฝ๊ฒ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ ์ ์์.
```java
User user = new User(1L, "Alice", "alice@example.com");
3. DTO ๊ฐ์ฒด ์์ฑ์ ํ์ฉ.
- โ๏ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ์๋ตํ DTO ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ๋จ.
```java
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class UserDTO {
private String username;
private String email;
}
- โ๏ธ `new UserDTO("Alice", "alice@example.com")`์ ๊ฐ์ ํํ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์.
## โ
3๏ธโฃ `@AllArgsConstructor`์ ๋ค๋ฅธ Lombok ์ด๋
ธํ
์ด์
.
### 1. `@NoArgsConstructor`
- โ๏ธ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑ.
### 2. `@RequiredArgsConstructor`
- โ๏ธ `final` ๋๋ `@NonNull`๋ก ์ ์ธ๋ ํ๋๋ง ํฌํจํ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑ.
### 3. `@Builder`์ ์กฐํฉ.
- โ๏ธ Builder ํจํด์ ํตํด ๊ฐ๋
์ฑ๊ณผ ์ ์ฐ์ฑ์ ๋์ผ ์ ์์.
```java
import lombok.AllArgsConstructor;
import lombok.Builder;
@AllArgsConstructor
@Builder
public class MyClass {
private String name;
private int age;
}
- โ๏ธ
MyClass.builder().name("Alice").age(25).builder();
ํํ๋ก ๊ฐ์ฑ ์์ฑ ๊ฐ๋ฅ.
โ 4๏ธโฃ ์ฅ์ .
1. ์ฝ๋์ ๊ฐ๊ฒฐํ.
- โ๏ธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํ ํ์ ์์ด ๋ชจ๋ ํ๋๋ฅผ ํฌํจํ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค.
2. ์ ์ง๋ณด์์ฑ ํฅ์.
- โ๏ธ ํด๋์ค ํ๋๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์์ฑ์ ์ฝ๋๋ ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์.
3. ๊ฐ์ฒด ์ด๊ธฐํ ์ฉ์ด.
- โ๏ธ ๊ฐ์ฒด๋ฅผ ํ ๋ฒ์ ์ด๊ธฐํํ๋๋ฐ ์ ์ฉํ๋ฉฐ DTO, ์ํฐํฐ, VO ํด๋์ค ๋ฑ ๋ค์ํ ๊ณณ์์ ํ์ฉ ๊ฐ๋ฅ.
โ 5๏ธโฃ ์ฃผ์์ .
1. ํ๋ ๊ฐ์ ์ฆ๊ฐ ์ ๊ฐ๋ ์ฑ ์ ํ.
- โ๏ธ ํ๋๊ฐ ๋ง์ ๊ฒฝ์ฐ ์์ฑ์ ๋งค๊ฐ๋ณ์์ ์์๋ฅผ ์๋ชป ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ์์.
- โ๏ธ ์ด๋ฐ ๊ฒฝ์ฐ
@Builder
์ฌ์ฉ์ ๊ถ์ฅ.2. JPA์ ํจ๊ป ์ฌ์ฉํ ๋.
- โ๏ธ ์ด๋ฐ ๊ฒฝ์ฐ
- โ๏ธ JPA ์ํฐํฐ ํด๋์ค์์
@AllArgsConstructor
๋ ๋ชจ๋ ํ๋๋ฅผ ์ด๊ธฐํํ๋ฏ๋ก ๊ธฐ๋ณธ ์์ฑ์(@NoArgsConstructor
)๋ ํจ๊ป ์ถ๊ฐํด์ผ ๋ฆฌํ๋์ ๊ณผ ํธํ๋จ.@AllArgsConstructor @NoArgsConstructor public class User
๐ ์ ๋ฆฌ
- โ๏ธ
@AllArgsConstructor
๋ ๋ชจ๋ ํ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํด.- โ๏ธ ์ฃผ๋ก DTO, ์ํฐํฐ ํด๋์ค์ ๊ฐ์ฒด ์ด๊ธฐํ์ ์ฌ์ฉ๋๋ฉฐ, Builder ํจํด๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ฑ ํจ๊ณผ์ ์.