Defcos W2D 4-5TIL


バックエンド設計コースにおける重要な概念や課題開発ログをまとめた空間である.

Collection


複数のデータを効率的に処理する方法を提供するクラスの集合.
  • List 인터페이스Vector, ArrayList, LinkedList, Stack, Queue
  • Set 인터페이스HashSet, TreeSet
  • Map 인터페이스(ListとSetとは異なる)
    HashMap, TreeMap, Hashtable, Properties

  • Generic


    これは、データ型を一般化し、クラス、インタフェース、およびメソッドで使用されるデータ型をパラメータとして使用できることを意味する.コンパイル時にプリタイプチェックを実行するため、オブジェクトのタイプ安定性を向上させ、戻り値のタイプチェックとタイプ変換のワークロードを削減できます.以下のサンプルコードでは、Tは任意の参照型変数である.クラスを作成するときは、タイプ変数で実際に使用されるオブジェクトのタイプを指定する必要があります.
    Class MyArray<T> {
    	T element;
        
        void setElement(T element) {
        	this.element = element;
        }
        
        T getElement() {
        	return element;
        }
    }

    +主に使用するタイプ表現

    <T> : Type<E> : Element<K> : Key<N> : Number<V> : Value<R> : Result

    + Generic Wild Card

    <?>:すべてのクラスまたはインタフェースタイプをパラメータとして使用できます.<? extends 클래스>:特定のオブジェクトのサブクラスのみをパラメトリック化<? super 클래스>:特定のオブジェクトの親のみをパラメータ化

    Method Chaining


    複数のメソッド呼び出しを接続し、1つの実行文で表現される構文形態.メソッドフィルタリングは、右側のメソッドから順次呼び出され、各戻りが呼び出し可能なメソッドを呼び出してこそ正常に動作します.

    + Builder Pattern


    メソッドフィルタ方式のインスタンスを用いて設計モードを生成し、メソッドのreturnは必ずthisでクラスの複数のメソッド呼び出しを表す.コンストラクタモードは、必要なコンストラクタパラメータとオプションパラメータのコンストラクタ呼び出し方式を簡略化できるという利点があり、主に属性の多いクラスの作成に使用されます.
    public class User {
        private String name;    // 필수
        private int age;    	// 필수 
        private String email;   // 선택
    	private String address;   // 선택
       
       //User의 생성자 매개변수 전달 역할을 한다.
       public static class Builder {
           private String name = "홍길동";
           private int age = 0;
           private String email = "[email protected]";
           private String address = "없음";
    	   //필수 매개변수에 대한 생성자
           public Builder(String name, int age) {
               this.name = name;
               this.age = age;
           }
    
           public Builder age(int age) {
               this.age = age;
               return this;
           }
    
           public Builder email(String email) {
               this.email = email;
               return this;
           }
    
           public User build() {
               return new User(this);
           }
       }
    
       public User(Builder builder) {
           this.name = builder.name;
           this.age = builder.age;
           this.email = builder.email;
           this.address = builder.address;
       }
    
        public static void main(String[] args) {
            User user = new Builder("김코딩", 24)
                    .email("[email protected]")
                    .build();
        }
    }
     

    Stream


    Java 8に追加されるストリームとは、Ramdaが利用可能なデータストリームのことである.複数の関数を組み合わせて、データの連続性を所望の結果としてフィルタリングし、加工できるのが特徴です.また、並列処理も可能であり、多くの要素を迅速に処理する利点がある.Collectionオブジェクトにはstreamも用意されています.
    //스트림 생성 메소드
    List<String> list = Arrays.asList("a", "b", "c");
    Stream<String> listStream = list.stream();
    Stream<String> stream = Stream.of("a", "b", "c"); 
    Stream<String> stream = Stream.of(new String[] {"a", "b", "c"}); 
    Stream<String> stream = Arrays.stream(new String[] {"a", "b", "c"});
    
    //조건을 만족하는 stream으로 가공
    Stream<T> filter(Predicate<? super T> predicate)
    //데이터가 변환된 stream으로 가공 
    <R> Stream<R> map(Function<? super T,? extends R> mapper)
    //유일한 element만 stream으로 가공
    Stream<T> distinct()
    //데이터가 정렬된 stream으로 가공
    Stream<T> sorted()
    Stream<T> sorted(Comparator<? super T> comparator)
    //maxSize만큼의 stream으로 가공 
    Stream<T> limit(long maxSize)
    //stream의 있는 모든 데이터에 대한 처리
    void forEach(Consumer<? super T> action)
    コメントリンク

    Optional


    Javaの機能は、開発中に遭遇したNPE(Null Pointer Exception)の問題を解決し、NULLを返さずに空のオブジェクト値を送信する汎用ルールですが、空のオブジェクト値自体は1つのデータと判断する曖昧性があります.Optional<T>の機能は、空のオブジェクトを静的変数として使用し、メモリを節約できるWrapperクラスです.(ここでは、空のインスタンスを作成するモノトーンモードを使用します.)
    //Optional 클래스 구성
    public final class Optional<T> {
        //빈 객체 
        private static final Optional<?> EMPTY = new Optional<>();
        private final T value;
        
        private Optional() {
            this.value = null;
        }
        ...
    }
    //빈 객체 생성 메소드
    Optional<String> optional = Optional.empty();
    //값이 있는 객체 생성 메소드
    Optional<String> optional = Optional.of("MyName");
    // 비거나 값이 있는 객체에 대한 생성 메소드
    Optional<String> optional = Optional.ofNullable(getString());
    
    //없는 경우를 고려한 메소드 처리
    String name = optional.orElse("no name");
    String name = optional.orElseGet(()->"no name");
    String name = optional.orElseThrow(noSuchElementException::new);
    
    //stream과 같은 메소드가 지원되고 
    //이를 활용한 method chaining이 가능하다.
    
    
    

    Annotation

  • コード記述構文エラーのチェックに関する情報をコンパイラに提供
  • ソフトウェア開発ツールの構築または展開時にコードを自動的に生成するための情報
  • 実行時(実行時)特定機能を実行する情報を提供
  • @Override親(親)クラス(またはインタフェース)でメソッドが見つからない場合は、コンパイルエラーが発生します.@FunctionalInterfaceJava 8からサポートを開始し、関数インタフェースのツールを指定します.メソッドが存在しないか、デフォルトのメソッドを除く1つ以上のメソッドが存在する場合、コンパイルエラーが発生します.

    lombok


    これは、クラスメソッドの自動生成に関連する便利なコードの作成を支援する方法です.
  • build.gradleファイルの作成
  • repositories {
    	mavenCentral()
    }
    
    dependencies {
    	compileOnly 'org.projectlombok:lombok:1.18.22'
    	annotationProcessor 'org.projectlombok:lombok:1.18.22'
    	
    	testCompileOnly 'org.projectlombok:lombok:1.18.22'
    	testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
    }
  • Inteliijのsetting>plugins>lombokインストール
  • @NoArgsConstructorデフォルトの作成者兄弟@RequiredArgsConstructor必要なパラメータのコンストラクション関数プロパティを受け入れます(finalまたは@NonNullの変数に必要なパラメータを作成します).@AllArgsConstructorすべてのパラメータを受信するジェネレータを自動的に作成@Getter特定のフィールド値を自動的に生成する方法@Setter特定のフィールド値の変更方法を自動的に生成@ToString(exclude = "password")文字列の自動生成方法(特定のフィールドを除外)