IT/java|Spring

[디자인패턴] 자바빈즈 패턴 (JavaBeans Pattern)

snapcoder 2024. 10. 25. 15:11
728x90
반응형
SMALL

[디자인패턴] 자바빈즈 패턴 (JavaBeans Pattern)

 

 

 

 

 

 

 

출처 https://blog.naver.com/seek316/222074270048

 

 

 

 

 

개요

객체 생성 방식에서 필드가 많을 때의 문제를 해결하기 위한 방법 3가지 (패턴 하나씩 포스팅 진행)

      1. 생성자에 필드가 적다면? => 점층적 생성자 패턴

      2. 필드가 많고, 대부분의 필드가 선택적이면?  => 자바 빈즈 패턴

      3. 필드가 많고, 대부분의 필드가 필수적이면?  => 빌더 패턴

      

 하나씩 재미있게 읽어보실 수 있도록 깔끔한 스토리텔링식으로 작성해보겠습니다~

 

 

 

 

한눈에 보는 패턴별 장단점

 

 

 

 

자바빈즈 패턴 개념

두번째 디자인 패턴은 자바빈즈 패턴입니다.

유연해야 하는 로직에서 자주 사용됩니다.

ex. User 객체를 생성하고, 나중에 상황에 따라 address, phoneNumber 등을 추가로 설정할 때 등의 상황에 적합

 

- 매개변수 없는 기본생성자로 객체 생성 후, setter 메서드로 필드 값 설정

 

=> 쉽게말하면, 빈 객체에 setter로 하나씩 하나씩 담는 방식..!

생성자();
생성자.setUserId(값1);
생성자.setUserNm(값2);
생성자.setDept(값3);
생성자.setUserGbcd(값4);

 

 

 

 

 

장점

- 객체 초기생성 후에도, 값 설정 가능 => 유연함

- 선택적으로 필드 설정 가능

- 어떤 필드가 설정됐는지 직관적 확인 가능 => 가독성 높음

                 

 

단점

- 불변성 보장 안됨 : 객체 생성 후에도 필드 변경 가능 => 불변성 보장 불가

- 중간 상태 객체가 외부 노출됨 : 객체가 생성되기 전에 사용될 위험 있음

- 객체의 일관성 검증 어려움

 

 

 

 

 

코드 예시

public class NutritionFacts {
    private int servingSize;  // 필수
    private int servings;     // 필수
    private int calories;
    private int fat;
    private int sodium;
    private int carbohydrate;

    public NutritionFacts() { }

    public void setServingSize(int servingSize) { this.servingSize = servingSize; }
    public void setServings(int servings) { this.servings = servings; }
    public void setCalories(int calories) { this.calories = calories; }
    public void setFat(int fat) { this.fat = fat; }
    public void setSodium(int sodium) { this.sodium = sodium; }
    public void setCarbohydrate(int carbohydrate) { this.carbohydrate = carbohydrate; }
}

// 사용
NutritionFacts facts = new NutritionFacts();
facts.setServingSize(240);
facts.setServings(8);
facts.setCalories(100);

 

 

 

 

이 패턴은,

가독성이 좋지만, 불완전한 객체가 생성될 수 있어, 불변성을 보장하지 않는다.

 

딱딱했던 점층적 생성자 패턴을 유연하게 만든 패턴이라서 그런지,

생성 후에도 필드의 값을 설정할 수 있고

setter 메서드로 코드가 직관적이고

매개변수 순서나 조합에 자유로워졌다.

 

하지만, 유연한 만큼 객체가 완전히 설정되기 전에 외부에서 접근될 위험이 있다.

그리고 필드를 개별적으로 설정하다보니, 객체를 사용하기 전에 유효한 상태인지를 검증하기 어렵다.

 

 

 

 

보완 포인트 (=빌더 패턴이 생겨난 이유)

- 불변성 보장 : 빌더 객체 기반 모든 필드 설정 후, build() 메서드 통해 최종 객체 생성 => 완전한 상태의 객체 노출

- 일관성 유지 : 필수 필드와 선택적 필드를 구분 => 일관된 상태로만 객체 생성 => 멀티스레드 환경에서도 안전하게 사용

- 코드 가독성 향상 : 빌더의 메서드 체이닝 방식 사용 => 설정할 필드를 한줄씩 추가 => 보기 쉽게 표현

 

좀 더 안전해진 빌더패턴을 알아보러 가자!

메서드 체이닝~

 

2024.10.25 - [IT/java|Spring] - [디자인패턴] 빌더 패턴 (Builder Pattern)

 

[디자인패턴] 빌더 패턴 (Builder Pattern)

 

snapcode.tistory.com

 

 

 

 

728x90
반응형
LIST