메소드 레퍼런스(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);
감사합니다 !
'Language > Java' 카테고리의 다른 글
Java14 - Record (Data class) 정리 (0) | 2022.02.12 |
---|---|
Java - Atomic Variable (+ 동시성 제어 비교 with volatile, synchronized) (2) | 2022.02.12 |
Effective Java - Wrapper 클래스 사용 시 주의할 점 (오토 박싱, 오토 언박싱) (0) | 2022.01.14 |
Effective Java - 생성자 대신 정적 팩토리 메서드를 사용하라! (0) | 2022.01.02 |
StringBuilder를 초기화 하는 방법 3가지 성능 비교 (0) | 2021.10.07 |