Language/Java

Java 8 - 메소드 레퍼런스(Method Reference) : 람다식 간단하게 표현하기!

JaeHoney 2022. 2. 11. 14:50

메소드 레퍼런스(Method Reference)

comments라는 List<String>타입의 리스트가 있다고 가정하겠습니다. 해당 배열에 대한 내용을 하나씩 출력할 때 코드는 어떻게 작성할까요..? 아마 리팩토링 경험이 많이 없으신 분들은 아래와 같이 작성하실 수 있습니다.

for(int i = 0; i < comments.size(); i++) {
    System.out.println(comment.get(i));
}

또는 조금 간추려서, 아래처럼 작성할 수도 있습니다.

for(String comment : comments) {
    System.out.println(comment);
}

 

람다식

 

리팩토링 경험이 조금 있으신 분들은 람다식을 사용해서 코드를 단 한 줄로 표현할 수 있습니다. 

comments.forEach(comment -> System.out.println(comment));

 

하지만 위의 코드도 충분하지 않습니다.

 

메소드 레퍼런스

Java8부터 지원하는 메소드 레퍼런스(Method Reference)를 쓰면 더 직관적인 코드로 수정할 수 있습니다.

comments.forEach(System.out::println);

 

[Instance method]

 

꼭 정적 클래스가 아니고, Instance 메소드도 메소드 레퍼런스 사용이 가능합니다.

public class Student {

    String name;

    public void printName() {
        System.out.println(name);
    }
    
}

 

아래 코드는 Student 리스트 목록을 하나씩 참조해서 printName을 호출하는 코드입니다. 람다와 스트림을 사용했습니다.

students.stream().forEach(s -> s.printName());

꼭 임의의 객체를 작성하지 않아도, 메소드 레퍼런스를 사용해서 간결하게 작성할 수 있습니다.

students.stream().forEach(Student::printName);

 

감사합니다 !