본문 바로가기
언어

[Java] Java8 - 함수형 프로그래밍(5)

by 코린이 프로도 2022. 12. 4.
반응형

Java 8 시리즈는 인프런 강의를 듣고 정리한 내용이다.
참고 : https://www.inflearn.com/course/the-java-java8/dashboard

더 자바, Java 8 - 인프런 | 강의

자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이

www.inflearn.com

메소드 레퍼런스


람다표현식에서 바디에 해당하는 부분을 직접 구현하는 것이 아니라, 기존에 같은 동작을 수행하는 메소드가 있다면 그 메소드를 참조하여 간단하게 표현하는 것을 메소드 레퍼런스라고 한다.

메소드 참조 방법

  1. 스태틱 메소드 참조 → 타입::스태틱 메소드
  2. 특정 객체의 인스턴스 메소드 참조 → 객체 레퍼런스::인스턴스 메소드
  3. 임의 객체의 인스턴스 메소드 참조 → 타입::인스턴스 메소드
  4. 생성자 참조 → 타입::new

아래 메소드가 정의된 클래스 예시를 통해 참조 방법을 하나 씩 다뤄보자.

public class Gretting {
	private String name;
    
    public Greeting() {
    }
    
    public Greeting(String name) {
    	this.name = name;
    }
    
    public String hello(String name) {
    	return "hello " + name;
    }
    
    public static String hi(String name) {
    	return "hi " + name;
    }
}

스태틱 메소드 참조

public class App {
	
    public static void main(String[] args) {
    	UnaryOperator<String> hi = (s) -> "hi " + s;  //기존 람다
        UnaryOperator<String> hi = Greeting::hi;  //static 메소드 참조
    }
}

특정 객체의 인스턴스 메소드 참조

public class App {
	
    public static void main(String[] args) {
    	UnaryOperator<String> hi = (s) -> "hi " + s;  //기존 람다
        
        Greeting greeting = new Greeting();
        UnaryOperator<String> hi = greeting::hello;
        
    }
}

임의의 객체 인스턴스 메소드 참조

public class App {
	
    public static void main(String[] args) {
    	String[] names = {"corin", "hello", "prodo"};
        
        Arrays.sort(names, new Comparator<String>() {
        	@Override
            public int compare(String o1, String o2) {
            	return 0;
            }
        });
        
        Arrays.sort(names, (o1, 02) -> 0);  //람다 표현식
        Arrays.srot(names, String::compareToIgnoreCase); //메소드 레퍼런스
    }
}

생성자 참조

public class App {
	
    public static void main(String[] args) {
    	Supplier<Greeting> newGreeting = Greeting::new; //매개변수가 없는 생성자
        
        Function<String, Greeting> greeting = Greeting::new; // 위와 다른 생성자를 참조한다.
        Greeting hi = greeting.apply("corin");
        System.out.println(hi.getName()); //corin 출력
    }
}
반응형

'언어' 카테고리의 다른 글

[Java] 메모리 누수 원인 알아보기  (0) 2023.01.01
[Java] static  (0) 2022.12.17
[Java] Java8 - 함수형 프로그래밍 (4)  (0) 2022.12.01
컴파일 언어 vs 인터프리터 언어  (0) 2022.11.29
[Java] 다형성 Ploymorphism  (0) 2022.11.08