본문 바로가기

Language/Java

Java 메서드 참조란?

반응형

목차

 

· 메서드 참조란?

· 메서드 레퍼런스의 4가지 케이스

· ClassName::staticMethodName

· objectName::instanceMethodName

· ClassName::instanceMethodName

· ClassName::new

 


메서드 참조란?


람다 표현식이 단 하나의 메서드만을 호출하는 경우에 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해준다.

:: 오퍼레이터 사용한다.

생략이 많기 때문에 사용할 메서드의 매개변수의 타입과 리턴 타입을 미리 숙지해야 한다.

 

메서드 레퍼런스의 4가지 케이스


  1. ClassName::staticMethodName : 클래스의 static method를 지정할 때
  2. objectName::instanceMethodName : 선언된 객체의 instance method를 지정할 때
  3. ClassName::instanceMethodName : 객체의 instance method를 지정할 때
  4. ClassName::new : 클래스의 constructor를 지정할 때

1. ClassName::staticMethodName


클래스의 static method (정적 메서드)를 지정할 때

Function<String, Integer> str2int = Integer::parseInt;
int five = str2int.apply("5");

2. objectName::instanceMethodName


이미 선언되어있는 객체의 instance method를 지정할 때

String str = "hello";
Predicate<String> equalsToHello = str::equals; 
boolean helloEqualsWorld = equalsToHello.test("world");

3. ClassName::instanceMethodName


해당 클래스의 인스턴스를 매개변수(parameter)로 넘겨 메서드를 실행해주는 함수

Function<String, Integer> strLength = String::length;
int length = strLength.apply("Hello world!");

BiPredicate<String, String> strEquals = String::equals;
boolean result = strEquals.test("hello", "world");

4. Constructor Reference

생성자를 호출하는 람다 표현식도 앞서 살펴본 메소드 참조를 이용할 수 있다.

 


public class User {
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

BiFunction<Integer, String, User> userCreator = User::new;
User cha = userCreator.apply("Char", 12);

 

반응형