[死亡経路2週目-3]TIL


JAVA


Interface

  • 全ての方法は、窓押し法により実施するクラス(実施部がない)
  • である.

    インタフェース機能

  • を実施する.
  • の多形性を提供します.
  • interface MyRunnable {
        void myRun();
    }
    
    interface YourRunnable {
        void yourRun();
    }
    
    public class Main implements MyRunnable, YourRunnable {
    
        public static void main(String[] args) {
            Main m = new Main();
            m.myRun();
            m.yourRun();
    
            MyRunnable myRunnable = new Main();
            myRunnable.myRun();
    
            YourRunnable yourRunnable = new Main();
            yourRunnable.yourRun();
        }
    
        @Override
        public void myRun() {
            System.out.println("Hello myRun!");
        }
    
        @Override
        public void yourRun() {
            System.out.println("Hello yourRun!");
        }
        
    }

  • 結合度の低減(ログインインタフェースがあれば/NAVER、KACAログインインプリメンテーション)
    依存の具体化

    抽象に依存する場合

  • defaultメソッド機能

  • java 8から、インタフェースの残念さで強化されます.
  • インターフェースは、一実施形態を提供する.
  • interface MyInterface { // 추상메서드로만 이뤄진 클래스 == 인터페이스
    
        // 구현이 있다.
        // 추상메서드가 아니라는 얘기는 인터페이스 안에 구현체가 들어간다.
        default void sayHello() {
            System.out.println("Hello World");
        }
    
        void method(); // 구현이 X
    
    }
    
    public class Main implements MyInterface{
        public static void main(String[] args) {
            Main m = new Main();
            m.sayHello();
        }
    
        // 물론 오버라이드도 가능하다.
        @Override
        public void sayHello() {
            System.out.println("Bye World");
        }
        
        @Override
        public void method() {
            throw new RuntimeException();
        }
    }
    
  • Adapterの役割を果たしました.
  • インタフェースを追加するだけで機能を拡張できます.
  • 静的方法を使用できます.関数プロバイダになります.
  • メソッドは、クラス内の関数をメソッドと呼びます.Java 8以上から関数型インタフェースが現れました.
  • Functional Interface

    @FunctionalInterface
    interface MyMap {
        void map(); 
    
        default void sayHello() {
            System.out.println("SayHello");
        }
    
        static void sayBye() {
            System.out.println("ByeHello");
        }
    }
    抽象的な方法が1つしかないインタフェース:
  • defaultまたはstaticはどうでもいい.
  • @Functional Interface Anotationと明記する必要があります.
  • 一時的なインタフェースの作成

  • 匿名クラスを使用してインタフェースインスタンスを作成し、インプリメンテーションを直ちに定義および使用します.
  • Lambda式

  • メソッドも匿名ではいけませんか?
  • 匿名メソッドを使用して簡潔なインタフェースインスタンス
  • を作成する.
    public class Main2 {
        public static void main(String[] args) {
    
            // 익명 클래스 사용
            new MyRunnable() {
                @Override
                public void run() {
                    System.out.println("hello");
                }
            }.run();
    
            // 익명메서드를 사용해서 표현하는 방식 : 람다 표현식
            // 생략할 수 있게 만들어준다 어차피 오버라이드를 해줄것이기 때문이다.
            // 함수형 인터페이스라면 어차피 메서드는 하나이기 때문에
            MyRunnable myRunnable = () -> System.out.println("hello");
    
        }
    }
  • ラムダ式は、関数型インタフェースでのみ使用できます.抽象的な方法が1つしかない場合、最終的に実現する方法は1つしかないが、2つを超えると、どの方法に適用されるか分からないからだ.
  • は簡潔に表現できる.
  •         MyMapper m = (str) -> str.length();
    
            MyConsumer c = i -> System.out.println(i);

    方法の研究

  • 入力ラムダ式の値をそのまま使用すると
  • となります.
  • 表記法
  • の値が変形した場合は無効になります.
  •         MyMapper m = String::length;
    
            MyConsumer c = System.out::println;
  • メソッドを使用する利点は、入力値を変更せずに直接使用することです.
  • 開発者の介入を阻止することによって安定性を得ることができる.