1. 자바 메서드 참조 (Java Method Reference)
자바 메서드 참조는 자바 8 버전부터 지원해주는 기능으로 람다식에서 메서드를 참조하여 사용하여 보다 간단하게 표현할 수 있도록 해준다.
사용 방법은 '::' 기호를 사용하여 [클래스명]::[메서드명] 과 같이 사용한다. 스태틱 메서드의 경우 인스턴스 대신 클래스 이름으로 사용할 수 있다.
2. 메서드 참조 형식
메서드 참조는 사용하는 패턴에 따라 다음의 3가지로 구분된다.
- static method reference
- instance method reference
- constructor reference
- static method reference
static method reference는 클래스의 static method 를 메서드 참조로 사용하는 케이스이다. [클래스명]::[메서드명] 의 패턴으로 사용된다.
interface FunctionalInterface {
void printVal(String val);
}
public class StaticReference {
public static void printSomething(String val) {
System.out.println(val);
}
public static void main(String[] args) {
FunctionalInterface ft = StaticReference::printSomething;
ft.pirntVal("Hello"); // Hello
}
}
위의 예제에서 MethodReference 클래스의 static 메서드인 printSomething 을 메서드 참조 방식으로 사용하여 함수형 인터페이스인 FunctionalInterface ft 가 참조하도록 하였다.
- instance method reference
instance method reference 는 클래스의 static 메서드가 아닌 객체의 메서드를 메서드 참조로 사용하는 케이스를 의미한다.
public class InstanceReference {
String name;
public InstanceReference(String name) {
this.name = name;
}
public void printName() {
System.out.println(this.name);
}
}
public static void main(String args[]) {
List<InstanceReference> list = Arrays.asList(new InstanceReference("a"), new InstanceReference("b"), new InstanceReference("c"));
list.stream().forEach(InstanceReference::printName);
}
/*
a
b
c
*/
forEach 문에서 InstanceReference 의 객체들이 전달되기 때문에 해당 객체들의 클래스 타입인 InstanceRefernce 와 참조할 메서드 printName 을 사용하여 InstanceRefernce::printName 으로 표현하여 객체의 메서드를 호출한다.
- constructor method reference
constructor method reference 는 클래스의 생성자를 참조하는 것으로 new 키워드를 사용하여 [클래스명]::new 의 형식으로 사용한다.
public class ConstructorReference {
String name;
public ConstructorReference(String name) {
this.name = name;
}
public void printName() {
System.out.println(this.name);
}
}
public static void main(String args[]} {
List<String> names = Arrays.asList("a", "b", "c");
names.stream()
.map(ConstructorReference::new)
.forEach(ConstructorReference::printName);
}
/*
a
b
c
*/
map 메서드에서 ConstructorReference::new 를 통해 생성자를 참조하여 사용한다. 이를 통해서 각 String 요소들이 ConstructorReference 객체로 변환된다. 이들을 forEach 문에서 출력하도록 한다.
[reference]
- https://www.javatpoint.com/java-8-method-reference
- https://codechacha.com/ko/java8-method-reference/
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 람다식 (lambda expression) (1) | 2024.01.24 |
---|---|
[JAVA] 자바 Thread-safe (0) | 2022.08.21 |
[JAVA] 쓰레드의 동기화 (0) | 2022.03.15 |
[JAVA] 쓰레드 실행제어 (0) | 2022.03.11 |
[JAVA] 쓰레드 구현 및 실행 (Thread, Runnable, start(), run()) (0) | 2022.03.10 |