본문 바로가기

기록/알고리즘

[Java] Builder 패턴

SMALL

Builder 패턴

생성자를 사용하다 보면 많은 파라미터들을 할당해야할 때가 있다.

파라미터를 할당하는 과정에서 우리는 총 세가지 방법을 사용할 수 있다.

  1. 점층적 생성자 패턴
  2. 자바 빈즈 패턴
  3. 빌더 패턴

점층적 생성자 패턴

필수 매개변수만 받는 생성자, 선택 매개변수를 n개까지 받는 생성자를 하나씩 생성한다. 그리고 필요에 따라 해당하는 생성자를 호출하여 사용하는 방식이다. 불가능한 방법은 아니지만, 실제 사용하기에 의미를 파악하기도 어렵고, 클라이언트 코드를 작성하거나 읽기 어려운 단점이 생긴다. 이 단점을 보완하기 위해 자바 빈즈 패턴이 등장했다.

자바 빈즈 패턴

매개변수가 없는 생성자로 객체를 먼저 만들고, setter 메소드로 매개변수의 값을 설정하는 방식이다. 인스턴스를 만들기 쉽고, 읽기에도 훨씬 편하다. 단점은 setter 메소드를 매개변수 개수만큼 호출해야 하는 것이다. 그리고, 객체를 완전히 생성하기 전까지는 일관성이 유지되지 않는다. 때문에 클래스를 불변으로 만들 수 없다. 이러한 단점을 보완하기 위해 freeze 메소드가 있지만, 컴파일러가 확인할 방법이 없어 런타임 오류를 유발한다.

빌더 패턴

필수 매개변수만으로 생성자를 호출해 빌더 객체를 만드는 방식이다. 필수 매개변수가 포함된 생성자 객체를 가지고 setter 메소드들로 추가 매개변수를 설정한다. 마지막으로 builder()를 호출해 불변 객체를 생성한다.

빌더 패턴은 계층적 구조에서 사용하기에 용이하다. 하위 클래스를 추상적으로 정의하고 구체화하는 방법도 가능하다. builder를 활용해 하위 클래스를 반환하는 것을 공변 반환 타이핑이라고 한다.

SMALL

'기록 > 알고리즘' 카테고리의 다른 글

[Programmers][Java] 소수 만들기  (0) 2022.05.25
[Programmers][Java] 실패율  (0) 2022.05.23
[카카오] 신고 결과 받기  (0) 2022.02.26
[백준][JAVA] 큰 수 A+B  (0) 2021.12.19
[Programmers] [JAVA] 더 맵게  (0) 2021.11.05