• ABOUT
  • POSTS
  • GUESTBOOK

Β© 2025 BlueCool12 All rights reserved.

2026.01.10Spring

πŸ§‘β€πŸ”§ Lombok의 μƒμ„±μž μ–΄λ…Έν…Œμ΄μ…˜

Lombokμ—λŠ” μƒμ„±μž κ΄€λ ¨ μ–΄λ…Έν…Œμ΄μ…˜μ΄ λŒ€ν‘œμ μœΌλ‘œ 3κ°€μ§€κ°€ μžˆλ‹€.

@NoArgsConstructor 
@AllArgsConstructor 
@RequiredArgsConstructor 

각각에 λŒ€ν•΄ λͺ…ν™•ν•˜κ²Œ μ•Œμ•„λ³΄μž!

1. @NoArgsConstructor 


첫 번째둜 @NoArgsConstructor μ–΄λ…Έν…Œμ΄μ…˜μ˜ 경우 λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄ μ€€λ‹€. 

예λ₯Ό λ“€μ–΄ 이런 ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ 

@NoArgsConstructor
public class Post {
private Long id;
private String title;
private String content;
private LocalDateTime createdAt;
}

Lombok은 λ‚΄λΆ€μ μœΌλ‘œ μ•„λž˜μ™€ 같이 κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

public Post() {}

JPA 같은 ν”„λ ˆμž„μ›Œν¬λ‚˜ Jackson 같은 라이브러리λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ κΈ°λ³Έ μƒμ„±μžκ°€ 사싀상 ν•„μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ•„μ£Ό μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.

2. @AllArgsConstructor


@AllArgsConstructorλŠ” μ΄λ¦„μ—μ„œλ„ μ•Œ 수 μžˆλ“―μ΄ λͺ¨λ“  ν•„λ“œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ€€λ‹€.

@AllArgsConstructor
public class Post {
private Long id;
private String title;
private String content;
private LocalDateTime createdAt;
}

μœ„μ™€ 같은 ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ λ‚΄λΆ€μ μœΌλ‘œ μ•„λž˜μ™€ 같은 μƒμ„±μžλ₯Ό λ§Œλ“ λ‹€.

public Post(Long id, String title, String content, LocalDateTime createdAt) {
this.id = id;
this.title = title;
this.content = content;
this.createdAt = createdAt;
}

DTO와 같이 λͺ¨λ“  ν•„λ“œκ°’μ„ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ‚˜ Builder νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” 경우 μœ μš©ν•˜λ‹€.

3. @RequiredArgsConstructor


λ§ˆμ§€λ§‰μœΌλ‘œ @RequiredArgsConstructorλŠ” final ν‚€μ›Œλ“œ λ˜λŠ” @NonNull이 뢙은 ν•„λ“œλ§Œ ν¬ν•¨ν•˜λŠ” μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
}

μœ„μ˜ 같은 μ½”λ“œμ— λ‚΄λΆ€μ μœΌλ‘œ μ•„λž˜μ˜ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

public class PostService {
private final PostRepository postRepository;

public PostService(PostRepository postRepository) {
this.postRepository = postRepository;
}
}

주둜 Springμ—μ„œ μƒμ„±μž 기반 μ˜μ‘΄μ„± μ£Όμž…(DI)을 ν•  λ•Œ 자주 μ‚¬μš©λœλ‹€.


* μΆ”κ°€μ μœΌλ‘œ μœ„μ˜ 3κ°€μ§€ μ–΄λ…Έν…Œμ΄μ…˜μ˜ 경우 ν•„μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ μ‚¬μš© κ°€λŠ₯ν•œ 4κ°€μ§€ μ˜΅μ…˜λ“€μ΄ μžˆλ‹€. 

  • access
    - μƒμ„±μžλ₯Ό λ§Œλ“€ λ•Œ μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ„€μ •ν•  수 μžˆλ‹€. (PUBLIC, PRIVATE, PROTECTED λ“±)
    - @NoArgsConstructor(access = AccessLevel.PROTECTED) 와 같이 μ‚¬μš©ν•œλ‹€.
  • staticName
    - μ§€μ •ν•œ μ΄λ¦„μœΌλ‘œ 정적(static) νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό 같이 λ§Œλ“€μ–΄μ€€λ‹€.
@AllArgsConstructor(staticName = "of")
public class Post {
private Long id;
private String title;
private String content;
private LocalDateTime createdAt;
}
// μ•„λž˜μ™€ 같은 정적 λ©”μ„œλ“œκ°€ μžλ™μœΌλ‘œ μƒμ„±λœλ‹€.
public static Post of(Long id, String title, String content, LocalDateTime createdAt) {
return new Post(id, title, content, createdAt);
}
  • force
    - final ν•„λ“œλ₯Ό κ°•μ œλ‘œ μ΄ˆκΈ°ν™”ν•œλ‹€. 
    - 예λ₯Ό λ“€μ–΄ ν΄λž˜μŠ€μ— final ν•„λ“œκ°€ μžˆλŠ” 경우 κΈ°λ³Έ μƒμ„±μž 생성이 λΆˆκ°€λŠ₯ν•œλ° 이걸 κ°•μ œλ‘œ μ΄ˆκΈ°ν™”ν•  λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.
    - @AllArgsConstructor의 경우 λͺ¨λ“  ν•„λ“œλ₯Ό μƒμ„±μžμ—μ„œ λ°›κΈ° λ•Œλ¬Έμ— force μ˜΅μ…˜μ΄ ν•„μš” μ—†κ³  μ‚¬μš©ν•  μˆ˜λ„ μ—†λ‹€. 
  • onConstructor
    - μƒμ„±μžμ— 뢙일 μΆ”κ°€ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ§€μ •ν•œλ‹€.
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class PostService {
private final PostRepository postRepository;
}
// μ•„λž˜μ˜ ν˜•νƒœλ‘œ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.
@Autowired
public PostService(PostRepository postRepository) {
this.postRepository = postRepository;
}


이전 κΈ€
πŸ’‰ Spring으둜 μ•Œμ•„λ³΄λŠ” μ˜μ‘΄μ„± μ£Όμž…(DI)
λ‹€μŒ κΈ€
λ‹€μŒ 글이 μ—†μŠ΅λ‹ˆλ‹€ ( Ξ‡ . Ξ‡)
μž₯μ‹μš© 둜κ³