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 |
Tags
- 음악 url 파일 다운로드
- 검색
- compateto
- Deep Dive
- concurrency limit
- 우아한 테크코스
- 유효시간 설정 url
- 자바스크립트
- 모던 자바스크립트
- oauth
- TypeORM
- this
- 우아한테크코스
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- 파일 url
- 타입스크립트
- 프리코스
- 딥다이브
- bucket4j
- NestJS
- redis
- 스프링부트
- 프론트엔드 과제
- invalid_grant
- Dev-Matching
- 프로그래머스
- 프론트엔드
- api 비동기처리
- api 요청 수 제한
- AWS
Archives
- Today
- Total
개발 알다가도 모르겠네요
Builder Pattern 을 알아보자 본문
728x90
빌더패턴은 아래와 같은 경우에 쓰입니다.
- 객체 생성 패턴
- 생성자의 인자가 많은 경우
- 생성자의 인자들 중에 필수적 인자와 선택적 인자가 혼합되어 있는 경우
- Immutable 객체(변경할 수 없는 객체)를 생성하고 싶은 경우
Telescoping Constructor패턴
(점층적 생성자 패턴)
필수 인자를 받는 생성자를 정의한 후에 선택적 인자를 추가로 받는 생성자를 계속해서 정의
public class Book {
private Long id; //필수
private String isbn; //필수
private String title;
private String author;
private int pages;
private String category;
}
//필수적 인자 생성자
public Book(Long id, String isbn) {
this.id = id;
this.isbn = isbn;
}
//선택적 인자를 받는 생성자
public Book(Long id, String isbn, String title) {
this.id = id;
this.isbn = isbn;
this.title = title;
}
public Book(Long id, String isbn, String title, String author) {
this.id = id;
this.isbn = isbn;
this.title = title;
this.author = author;
}
public Book(Long id, String isbn, String title, String author, int pages) {
this.id = id;
this.isbn = isbn;
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(Long id, String isbn, String title, String author, int pages, String category) {
this.id = id;
this.isbn = isbn;
this.title = title;
this.author = author;
this.pages = pages;
this.category = category;
}
점층적 생성자 패턴의 문제점
- 인자가 많을 수록 생성자 개수도 많아짐.
- 생성자의 인자가 어떤 의미인지 파악하기 힘듦.
- 동일한 타입 인자인 경우 가독성이 떨어짐.
-Book book = new Book(1L, "isbn1234", "Design Pattern", "Insang Chung", 360, "CE");
-Book book = new Book(1L, "isbn1234", “Insang Chung", “Design Pattern", 360, "CE");
JavaBeans 패턴
Setter 메소드로 각 속성의 값을 설정하는 방법
public Book() { }
public void setId(Long id) { this.id = id; }
public void setIsbn(String isbn) { this.isbn = isbn; }
public void setTitle(String title) { this.title = title; }
public void setAuthor(String author) { Author = author; }
public void setPages(int pages) { this.pages = pages; }
public void setCategory(String category) { this.category = category;}
*가독성은 향상되지만 immutale object를 만들 수 없음.
Builder 패턴
public static class BookBuilder {
private Long id; //필수
private String isbn; //필수
private String title;
private String author;
private int pages;
private String category;
public BookBuilder(Long id, String isbn) {
this.id = id;
this.isbn = isbn;
}
public BookBuilder title(String title) { this.title = title; return this; }
public BookBuilder author(String author) { this.author = author; return this; }
public BookBuilder pages(int pages) { this.pages = pages; return this; }
public BookBuilder category(String category) { this.category = category; return this; }
public Book build() {
Book book = new Book();
book.id = this.id;
book.isbn = this.isbn;
book.author = this.author;
book.title = this.title;
book.pages = this.pages;
book.category = this.category;
return book;
}
-
가독성 개선
-
메소드 체인닝
-
Immutable 객체 생성
Book book = new Book.BookBuilder(1L, "isbn1234")
.author("insangchung")
.pages(360).category("CE")
.title("Design Pattern")
.build();
Lombok @Builder 어노테이션 사용
롬복 다운로드 : https://projectlombok.org/download
Getter/Setter/Builder 자동생성
@Getter
@Builder
public class LombokBook {
private Long id; //필수
private String isbn; //필수
private String title;
private String author;
private int pages;
private String category;
}
//Builder 패턴
LombokBook book = new LombokBook.LombokBookBuilder()
.id(1L)
.isbn(“isbn1234”)
.author("insang chung")
.pages(360)
.category("CE")
.title("Design Pattern")
.build();
//Mandantory 필드
@Getter@Builder
public class LombokBook {
@NonNull
private Long id; //필수
@NonNull
private String isbn; //필수
private String title;
private String author;
private int pages;
private String category;
}
'디자인패턴' 카테고리의 다른 글
Command Pattern 을 알아보자 (0) | 2021.12.11 |
---|---|
Strategy Pattern 을 알아보자 (0) | 2021.12.11 |
Singleton Pattern 을 알아보자 (0) | 2021.12.10 |
SOLID 설계원칙 (0) | 2021.12.09 |
객체지향의 원리 (0) | 2021.12.09 |