본문 바로가기
java

Lambda 04 메소드 참조

by 킹차니 2021. 12. 26.

 

 

생성자의 메소드 참조

종류 람다 메서드 참조
static메소드 참조 (x) -> ClassName.method(x) ClassName::method
인스턴스메소드 참조 (obj, x) -> obj.method(x) ClassName::method
특정 객체의 인스턴스메소드 참조 (x) -> obj.method(x) obj::method

 

 

- 매개변수 없는 경우

Supplier<MyClass> s = () -> new MyClass();

//메소드참조로 수정
Supplier<MyClass> s = MyClass::new;

 

- 매개변수 있는 경우

// 매개변수 1개인 경우
Function<Integer, MyClass> s = (i) -> new MyClass(i);
// 인자로 Integer타입을 주는 것을 알고 있으므로, i는 생략가능하다.

//메소드참조로 수정
Function<Integer, MyClass> s = MyClass::new;

// -------------------------------------

//매개변수 2개인 경우
BiFunction<Integer, Character, MyClass> s = (i, c) -> new MyClass(i, c);

//메소드참조로 수정
BiFunction<Integer, Character, MyClass> s = MyClass::new;

// -------------------------------------

//배열과 메소드참조
Function<Integer, int[]> f = x-> new int[x];
Function<Integer, int[]> f = int[]:new;

 

사용예시:

public class Ex{
    public static void main(String[] args) {

        //Supplier는 입력X, 출력O
        Supplier<MyClass> s = () -> new MyClass();
        MyClass mc = s.get();
        System.out.println(mc);

        //매개변수 없는 생성자 메소드참조
        Supplier<MyClass> s2 = MyClass::new;
        MyClass mc2 = s2.get();
        System.out.println(mc2);

        //매개변수2개인 생성자
        BiFunction<Integer, Character, MyClass> s3 = MyClass::new;
        MyClass mc3 = s3.apply(10, 'C');
        System.out.println(mc3);

        //배열 만들기
        Function<Integer, int[]> s4 = int[]::new;
        int[] array = s4.apply(10);
        System.out.println(array.length);
    }

    private static class MyClass {
        int i;
        Character c;
        public MyClass() {}
        public MyClass(Integer i, Character c) {
            this.i = i;
            this.c = c;
        }
    }
}

실행결과:
lambda.nam.lamdba.Ex1406$MyClass@75bd9247
lambda.nam.lamdba.Ex1406$MyClass@7dc36524
lambda.nam.lamdba.Ex1406$MyClass@129a8472
10

 

 

출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS

'java' 카테고리의 다른 글

Lambda 06 Stream의 연산 (중간 연산과 최종 연산)  (0) 2021.12.29
Lambda 05 Stream  (0) 2021.12.27
Lambda 03 Predicate의 결합  (0) 2021.12.26
Lambda 02 - java.util.function 패키지  (0) 2021.12.23
Lambda 01  (0) 2021.12.23