반응형
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
- router
- 플러그인
- addallattributes()
- linkedhastset
- 구글애널리틱스
- 인텔리제이
- JPA
- Polylang
- @Controller
- mergeattributes()
- 구글알고리즘
- @Query
- 구글
- HttpSession
- SEO
- GET
- GA4
- 리액트오류
- 데이터베이스
- set
- @Repository
- Login
- ChatGPT
- firebase
- db
- Thymeleaf
- useEffect
- @Entity
- post
- 워드프레스
Archives
- Today
- Total
개발천재
[Spring Boot] @Builder, 객체를 더 깔끔하게 생성하는 방법 본문
반응형
@Buildeer 이해하기
@Builder는 Lombok에서 제공하는 어노테이션으로, 객체를 보다 간편하게 생성할 수 있도록 도와주는 역할을 한다. 특히, 생성자 파라미터가 많을 때 가독성을 높이고, 유연하게 객체를 생성할 수 있다는 특징이 있다.
[ @Builder 간단 정리 ]
@Builder는 객체를 유연하고 가독성 있게 생성할 수 있도록 도와주는 Lombok 어노테이션
생성자 매개변수 순서를 신경 쓰지 않고 명확하게 값 설정 가능
@Builder.Default를 사용하면 기본값을 설정할 수도 있음
특정 생성자만 @Builder에서 사용할 수도 있음
기본적인 사용법
JPA에서 @Entity와 함께 사용할 때는 @NoArgsConstructor도 추가하는 게 좋다.
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 모든 필드를 받는 생성자
public class User {
private Long id;
private String name;
private String email;
}
일반적으로 객체를 만드려면 아래와 같이 사용해야한다.
일반적으로 생성자를 사용할 경우, 매개변수 순서를 정확히 맞춰야 해서 실수할 가능성이 높다.
User user1 = new User(1L, "Alice", "alice@example.com"); // 생성자 사용 (순서 중요!)
@Builder를 사용하여 객체를 만들 경우 아래과 같이 사용할 수 있다.
User user2 = User.builder()
.id(1L)
.name("Alice")
.email("alice@example.com")
.build();
@Builder를 사용하면 순서를 신경 쓰지 않고 명확하게 필드 값을 설정할 수 있다. 그렇기 때문에 가독성이 좋아지고, 필요한 값만 선택해서 넣을 수 있다. 또한 필드가 추가되거나 변경될 때 유연하게 대응이 가능해 유지보수에 용이하다.
@Builder와 생성자(@AllArgsConstructor) 함께 사용
엔티티
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 모든 필드를 받는 생성자
@Builder
public class User {
private Long id;
private String name;
private String email;
}
객체 생성하기
@Builder를 사용하면 불필요한 Setter 없이도 값을 설정할 수 있고, 객체의 불변성(immutable)을 유지할 수 있어서 안전하다.
// 1. 빌더 패턴 사용
User user1 = User.builder()
.id(1L)
.name("Alice")
.email("alice@example.com")
.build();
// 2. @AllArgsConstructor 이용
User user2 = new User(2L, "Bob", "bob@example.com");
// 3. 기본 생성자(@NoArgsConstructor) 이용 후 Setter 사용 (비추천)
User user3 = new User();
user3.setId(3L); // Setter 사용 시 변경 가능 (immutable 아님)
user3.setName("Charlie");
user3.setEmail("charlie@example.com");
@Builder 추가기능
@Builder.Default
필드에 기본 값을 설정하려면 @Builder.Default를 사용한다.
@Getter
@Builder
public class User {
@Builder.Default
private Long id = 0L; // 기본값 설정
private String name;
private String email;
}
@Builder에서 특정 생성자 사용하기
@Builder는 기본적으로 모든 필드를 포함한 생성자(@AllArgsConstructor)를 사용한다. 만약 특정 생성자만 @Builder에서 사용하고 싶다면, @Builder를 생성자 위에 직접 붙이면 된다.
@Getter
@NoArgsConstructor
public class User {
private Long id;
private String name;
private String email;
@Builder
public User(String name, String email) { // id 제외
this.name = name;
this.email = email;
}
}
// id 없이 객체 생성 가능
User user = User.builder()
.name("Alice")
.email("alice@example.com")
.build();
반응형
'개발 준비 > Spring Boot' 카테고리의 다른 글
[Spring Boot] @Transactional, 스프링에서 트랜잭션을 다루는 방법 (0) | 2025.02.26 |
---|---|
[Spring Boot] H2 Database 이용해서 더미 데이터 만들기 (1) | 2025.02.24 |
[Spring Boot] 로그인 처리 방법, 세션 이용하기 (2) | 2025.02.21 |
[Spring Boot] JpaRepository 사용하기 (0) | 2025.02.21 |
[Spring Boot] DTO와 Entity 간의 변환 (1) | 2025.02.21 |