コンストラクタアレイ(JAVA)コンストラクタPatternを使用する理由


1.コンストラクタ・モード(Builder Pattern)を使用する理由
コンストラクタモードの利点
  • 必要なデータのみ設定
  • .
  • 柔軟性
  • 毒性を高めることができる
  • 不変性
  • 1.必要なデータのみ設定
    たとえば、Userオブジェクトの作成にageパラメータは必要ないとします.
    コンストラクション関数または静的メソッドを使用する場合は、ageにスタック値を追加するか、ageのない新しいコンストラクション関数を作成する必要があります.
    // 1. 더미 값
    User user = new User("테스트", 0, 181, 121);
    
    // 2. 생성자 또는 정적 메소드를 추가하는 방법
    @NoArgsConstructor
    @AllArgsConstrctor
    public class User{
    	private String name;
        private int age;
        private int height;
        private int iq;
        
        public User(String name, int height, int iq){
        	this.name = name;
            this.height = height;
            this.iq = iq;
        }
        
        public User static of(String name, int height, int iq){
        	return new User(name, 0, 181, 121);
        }
    }
    このような仕事は1、2回でいいが、繰り返すと時間の無駄になる.ただし、コンストラクタを使用すると動的に処理できます.
    User user = User.builder()
    			.name("테스트")
                .heihgt(181)
                .iq(121).build();
    さらに、必要なデータのみを設定するコンストラクタの利点は、コンストラクタや静的方法に比べて、テストオブジェクトを生成する際に使用しやすく、不要なコード量を低減することである.
    2.柔軟性を得る
    たとえば、Userクラスに体重を表す新しい変数weightを追加する必要があります.ただし、ジェネレータでオブジェクトを作成するコードが既にあるとします.
    // ASIS
    User user = new User("테스트", 19, 181, 121);
    
    // TOBE
    User user = new User("테스트", 19, 181, 121, 79);
    これにより、新しく追加された変数のために既存のコードをすべて変更する必要がある場合に直面します.ただし、コンストラクタモードを使用すると、新しい変数の追加などに直面しても、既存のコードには影響しません.
    3.可読性の向上
    コンストラクタモードを使用すると、パラメータが多くなっても可読性が向上します.コンストラクション関数を使用してオブジェクトを作成すると、パラメータが多ければ多いほど、コードのリハーサルが悪くなります.User user = new User("테스트", 19, 181, 121);19,181,121は何がすぐに把握しにくいかを意味し,パラメータの個数が多ければ多いほどコードが読みにくくなる.しかし、コンストラクタモードを適用すると、可読性が向上し、データを直感的に理解することができる.
    User user = User.builder()
    			.name("테스트")
                .age(19)
                .height(181)
                .iq(121).build();
    4.不変性の確保
    多くの開発者は、モディファイヤモードをよく使用します.しかし,Setterの実装は不要な拡張性を意味する.これはオープン‐クローズ法則に違反し,不要なコードリハーサルなどを招く.したがって、クラス変数をfinalとして宣言し、オブジェクトの作成をコンストラクタに渡すことが望ましい.
    @RequiredArgsConstructor
    @Builder
    public class User{
    	private final String name;
        private final int age;
        private final int height;
        private final int iq;
    }