일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- wil
- 면접(java
- 회고
- 자바
- 우선순위 큐(priorityqueue)
- 99클럽
- HTML
- Grafana
- Til
- 자료구조
- Entity
- 배열
- aop
- Java
- 코딩공부
- 항해99
- github
- 프로그래머스
- 코딩
- 코딩문제
- 메서드
- Spring
- cs 공부)준비
- 개발자 취업
- 정렬 알고리즘(sort algorithm)
- GIT
- ArrayList
- css
- 코딩테스트 준비
- 이진 탐색(binary search)
- Today
- Total
hayu's 개발 일지
[TIL]240313 Builder Pattern 본문
Builder Pattern 이란?
- 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다.
- 생성자에 들어갈 매개 변수를 메서드로 하나한 받아서 마지막에 빌드해서 객체를 생성한다.
Builder Pattern 탄생 배경
- 이전에는 Setter 메서드를 호출함으로써 유연적으로 객체 생성이 가능해졌다. 하지만 이런 방식은 객체 생성 시점에 모든 값들을 주입하지 않아 일관성 문제와 불변성 문제가 나타났다.
일관성문제
- 필수 매개변수는 객체가 초기화될 때 반드시 설정되어야 하는 값이다. 하지만 개발자가 메서드를 호출하지 않았다면 이 객체는 일관성이 무너진 상태가 된다. 즉, 객체가 유효하지 않은 것이다.
불변성문제
- Setter 메서드는 객체를 처음 생성할 때 필드값을 설정하기 위해 존재하는 메서드이다. 하지만 객체를 생성했음에도 여전히 외부적으로 Setter 메소드를 노출하고 있으므로 협업 과정에서 Setter 메서드를 호출해 함부로 객체를 조작할 수 있게 된다. 이것을 불변함을 보장할 수 없다고 한다.
+ Setter 메서드를 사용하면 의도를 파악하기 힘들다.
Builder Pattern
- 이런 문제들을 해결하기 위해 별도의 Builder 클래스를 만들어 메소드를 통해 값을 입력받고 Build() 메소드 하나로 인스턴스를 생성하여 리턴하는 패턴이다.
예시 코드
Post post = Post.builder()
.name("name")
.title("story")
.memo("memo")
.content("long time")
.build();
@Builder 이란?
- 개발자가 편하게 빌더 패턴을 이용하기 위해 LomBok 에서는 별도의 에너테이션을 지원하는데 클래스에 @Builder 를 붙여주면 클래스를 컨파일할 때 자동으로 클래스 내부에 빌더 API 가 만들어진다.
@Builder
public class Post {
private final String title;
private final Long price;
private final String phone;
private final String content;
}
객체를 다음과 같이 생성할 수 있게된다.
Post post = Post.builder() //어노테이션으로 생성된 빌더클래스 생성자
.title("게시글")
.price(3000)
.phone("010-1234-5678")
.content("당근 팔아요.")
.build();
'프레임워크 > spring' 카테고리의 다른 글
[TIL]240316 트러블 슈팅: 아이디 값 null (0) | 2024.03.16 |
---|---|
[TIL]240314 Swagger (1) | 2024.03.14 |
[TIL]240312 트랜잭션(transaction) (0) | 2024.03.12 |
[TIL]240308 트러블 슈팅: 로그인 성공 메세지 (0) | 2024.03.08 |
[TIL]240307 영속성 컨텍스트 (1) | 2024.03.07 |