ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL]메소드 참조; method reference
    CodeStates_Backend/TIL (Today I Learned) 2022. 7. 21. 01:14
     ⭐️ 개념 학습 순서 : 함수형 프로그래밍 ➡️ 람다,메소드 참조 ➡️ Stream

     

    메소드 참조(method reference)

     

    🧲 정의

    람다 표현식이 단 하나의 메소드만을 호출하는 경우, 더 간단하게 표현하는 방법이다.

    추가적으로 단순히 객체를 생성하고 리턴하는 생성자 역할의 람다식도 대체할 수 있다.

     


    🧲 종류

    1️⃣ 클래스이름 :: 메소드이름

    2️⃣ 참조변수이름 :: 메소드이름

    3️⃣ 생성자이름 :: new


    🧲  1️⃣의 예시

    (left, right) -> Math.max(left, right);
    IntBinaryOperator operator = Math :: max; //메서드 참조

    🧲  2️⃣의 예시

    //Calculator.java
    public class Calculator {
      public static int staticMethod(int x, int y) { // static 메소드이다.
      	return x + y;
      }
    
      public int instanceMethod(int x, int y) { // 인스턴스 메소드이다.
      	return x * y;
      }
    }
    import java.util.function.IntBinaryOperator;
    
    public class MethodReferences {
      public static void main(String[] args) throws Exception {
        IntBinaryOperator operator;
    
        // static 메서드의 경우
        operator = Calculator::staticMethod;
        System.out.println("static 메서드 결과 : " + operator.applyAsInt(3, 5));
    
        // 인스턴스 메서드의 경우
        Calculator calculator = new Calculator();
        operator = calculator::instanceMethod;
        System.out.println("인스턴스 메서드 결과 : "+ operator.applyAsInt(3, 5));
      }
    }
    /*
    static 메서드 결과 : 8
    인스턴스 메서드 결과 : 15
    */

    🧲  3️⃣의 예시

    //Member.java
    public class Member {
      private String name;
      private String id;
    
      public Member() {
        System.out.println("Member() 실행");
      }
    
      public Member(String id) {
        System.out.println("Member(String id) 실행");
        this.id = id;
      }
    
      public Member(String name, String id) {
        System.out.println("Member(String name, String id) 실행");
        this.id = id;
        this.name = name;
      }
    
      public String getName() {
        return name;
      }
    
    public String getId() {
        return id;
      }
    }
    import java.util.function.BiFunction;
    import java.util.function.Function;
    
    public class ConstructorRef {
      public static void main(String[] args) throws Exception {
        Function<String, Member> function1 = Member::new;
        Member member1 = function1.apply("kimcoding");
    
        BiFunction<String, String, Member> function2 = Member::new;
        Member member2 = function2.apply("kimcoding", "김코딩");
      }
    }
    
    /*
    Member(String id) 실행
    Member(String name, String id) 실행
    */

    'CodeStates_Backend > TIL (Today I Learned)' 카테고리의 다른 글

    [모의기술면접] Section4  (0) 2022.08.18
    *[TIL] JPA , Spring Data JPA  (0) 2022.07.24
    [TIL][모의기술면접#3]  (0) 2022.07.20
    [TIL]삽입 정렬 Insertion Sort  (0) 2022.07.18
    [TIL] Spring Rest Docs  (0) 2022.07.16
Designed by Tistory.