Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- C
- 종만북
- dfs
- BASIC
- 정수론
- web
- Math
- Algorithm
- C언어
- 따배씨
- 따라하며 배우는 C언어
- server
- BOJ
- Algospot
- JavaScript
- 따라하면서 배우는 C언어
- programmers
- String
- php
- udemy
- 생활코딩
- Cleancode
- Python
- 백준
- graph
- 인프런
- DP
- greedy
- BFS
- sorting
Archives
- Today
- Total
몽상실현개발주의
Lombok in Spring Framework 본문
Lombok?
Lombok은 자바 개발을 더 편리하게 하기 위한 라이브러리로, 반복적으로 작성해야 하는 코드를 줄여주는 어노테이션 기반의 도구입니다. Spring 프레임워크와 함께 사용될 때, Lombok은 개발자가 보일러플레이트 코드를 줄이고, 더 깔끔하고 관리하기 쉬운 코드를 작성할 수 있게 돕습니다.
- @Getter / @Setter: 필드에 대한 getter 및 setter 메소드 자동 생성
- @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: 생성자 자동 생성
- @Data: 클래스에 대한 getter, setter, toString, equals, hashCode 메소드를 한 번에 생성
- @Builder: 빌더 패턴 구현 자동화
- @Slf4j: 로깅을 위한 Logger 필드 자동 생성
* 보일러플레이트 코드?
보일러플레이트 코드란 변경 없이 반복적으로 사용되는 코드 조각을 의미합니다. Lombok은 이러한 코드를 줄여줌으로써 개발자가 보다 중요한 로직에 집중할 수 있게 도와줍니다.
Lombok의 주요 기능과 예시
1. @Getter / @Setter
- 클래스 필드에 대한 getter와 setter 메소드를 자동으로 생성합니다. 이 어노테이션을 사용하면 수동으로 각 필드에 대한 접근자(accessor) 및 변경자(mutator) 메소드를 작성할 필요가 없어집니다.
기존 코드:
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Lombok 사용 코드:
import lombok.Getter;
import lombok.Setter;
public class User {
@Getter @Setter
private String name;
}
2. @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
@NoArgsConstructor
- 이 어노테이션은 파라미터가 없는 기본 생성자를 자동으로 생성합니다. 특히 JPA(Java Persistence API)에서 엔티티 클래스에 기본 생성자를 요구할 때 유용하게 사용됩니다.
- 클래스에 명시적으로 생성자를 정의하지 않아도, 컴파일 시 Lombok이 기본 생성자를 생성해줍니다.
- final 필드가 있거나 @NonNull 어노테이션이 붙은 필드가 있는 경우, Lombok은 이 어노테이션을 사용할 수 없습니다.
@RequiredArgsConstructor
- 이 어노테이션은 초기화가 필요한 필드(final 또는 @NonNull 어노테이션이 붙은 필드)만을 매개변수로 받는 생성자를 자동으로 생성합니다. 이를 통해 필수적으로 초기화가 필요한 필드를 보장할 수 있습니다.
- 필수 필드만 초기화하는 생성자를 생성하므로, 객체의 일관성과 불변성을 유지하는 데 도움을 줍니다.
- 생성자는 클래스 내의 final 필드와 @NonNull 어노테이션이 붙은 필드에 대해서만 매개변수를 갖습니다.
@AllArgsConstructor
- 이 어노테이션은 클래스의 모든 필드를 매개변수로 받는 생성자를 자동으로 생성합니다. 클래스에 있는 모든 필드가 생성자의 인자로 사용되어 모든 속성을 초기화할 수 있게 해 줍니다.
- 모든 필드가 생성자의 인자로 제공되기 때문에, 객체 생성 시 모든 필드를 명시적으로 초기화해야 합니다.
- 특히 많은 수의 필드를 갖는 복잡한 객체를 초기화할 때 코드의 간결성을 유지할 수 있습니다.
기존 코드:
public class User {
private String name;
private String email;
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
Lombok 사용 코드:
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private String email;
}
3. @Data
- @Data 어노테이션은 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 모두 포함합니다.
- 클래스의 모든 필드에 대한 보일러플레이트 코드를 한 줄의 어노테이션으로 처리할 수 있습니다.
기존 코드:
public class User {
private String name;
private String email;
public User() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{name='" + name + "', email='" + email + "'}";
}
}
Lombok 사용 코드:
import lombok.Data;
@Data
public class User {
private String name;
private String email;
}
4. @Builder
- 빌더 패턴을 적용하여 객체 생성 시 안전하고, 명확하게 필요한 속성을 설정할 수 있게 도와줍니다. 특히 많은 필드를 가진 객체를 생성할 때 유용합니다.
기존 코드:
public class User {
private String name;
private String email;
private int age;
public User(String name, String email, int age) {
this.name = name;
this.email = email;
this.age = age;
}
}
// 객체 생성
User user = new User("John Doe", "john.doe@example.com", 30);
Lombok 사용 코드:
import lombok.Builder;
@Builder
public class User {
private String name;
private String email;
private int age;
}
// 객체 생성
User user = User.builder()
.name("John Doe")
.email("john.doe@example.com")
.age(30)
.build();
5. @Slf4j
- SLF4J 로깅 파사드를 위한 로그 객체를 자동으로 생성합니다. 이 어노테이션을 사용하면 별도의 로거 객체를 선언하지 않고도 로깅을 할 수 있습니다.
기존 코드:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
public void logUser(User user) {
logger.info("User: {}", user);
}
}
Lombok 사용 코드:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserController {
public void logUser(User user) {
log.info("User: {}", user);
}
}
'Dev' 카테고리의 다른 글
Spring Boot에서 의존성 주입: @Bean과 @Autowired의 이해 (0) | 2024.05.06 |
---|---|
빌더 패턴의 이해와 Java에서의 적용 (0) | 2024.05.06 |
SpringBoot VO 와 DTO (0) | 2024.05.05 |
Rails의 지연 로딩(Lazy Loading) 과 데이터베이스 연결 전환 (0) | 2024.03.26 |
AWS VPN Gateway와 VPN Connection 이해하기 (0) | 2024.03.12 |
Comments