[이것이 자바다] 16장 정리
이 포스트는 자바에서 람다식을 이용하는 방법과 함수형 프로그래밍의 기초를 설명합니다. 람다식은 익명 구현 객체로 변환되며, 함수형 인터페이스는 단 하나의 추상 메소드를 가져야 합니다. 또한, 메소드 참조를 이용하면 코드의 가독성을 높일 수 있으며, 인스턴스 메소드의 경우 객체 생성 후 참조 변수 뒤에 :: 기호를 붙이고 메소드 이름을 기술합니다.
Jan 19, 2024
Workable.java
package ch16;
@FunctionalInterface
public interface Workable {
void work();
}
Person.java
package ch16;
public class Person {
public void action(Workable workable) {
workable.work();
}
}
PersonExam.java
package ch16;
public class PersonExam {
public static void main(String[] args) {
Person person = new Person();
person.action(() -> { // 매개변수가 없는 람다식
System.out.println("출근을 합니다.");
System.out.println("프로그래밍을 합니다.");
});
person.action(() -> System.out.println("퇴근을 합니다.")); // 만약 return문을 포함해 실행문이 한줄이라면 {}를 생략할 수 있다.
}
}
핵심 키워드
- 자바는 람다식을 익명 구현 객체로 변환한다.
- 인터페이스가 익명 구현 객체를 람다식으로 표현하려면 인터페이스가 단 하나의 추상 메소드만 가져야 한다.
- 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙이면 된다.
Calculable.java
package ch16;
@FunctionalInterface
public interface Calculable {
double calculate(double x, double y);
}
Creatable.java
package ch16;
@FunctionalInterface
public interface Creatable {
Computer create();
}
Computer.java
package ch16;
public class Computer {
public double instanceMethod(double x, double y) {
return x + y;
}
}
LambdaExam.java
package ch16;
public class LambdaExam {
public static void main(String[] args) {
// Computer com = new Computer();
//
// action(5.0, 5.0, Math::pow); // 메소드 참조 방식
// action(10.0, 5.0, (x, y) -> Math.pow(x, y));
//
// action(3.0, 3.5, com::instanceMethod);
// action(3.0, 3.5, (x, y) -> {
// return com.instanceMethod(x, y);
// });
// Computer com = get(() -> new Computer());
Computer com = get(Computer::new);
}
public static void action(double x, double y, Calculable calculable) {
System.out.println("calculate 메소드 실행");
System.out.println(calculable.calculate(x, y));
System.out.println("calculate 메소드 종료");
}
public static Computer get(Creatable creatable) {
return creatable.create();
}
}
핵심 키워드
- 메소드 참조는 메소드를 참조해서 매개변수의 정보 및 리턴 타입을 알아해 람다식에서 불필요한 매개변수를 제거하는 것을 목적으로 한다.
- 람다식은 단순히 값을 메소드의 매개값으로 전달하는 역할만 하기 때문에 메소드 참조를 이용하면 코드의 가독성을 높일 수 있다.
- 만약 인스턴스 메소드일 경우에는 먼저 객체를 생성한 다음 참조 변수 뒤에 :: 기호를 붙이고 인스턴스 메소드 이름을 기술한다.
결론
해당 코드들을 통해 함수형 프로그래밍의 기초와 람다식을 사용하는 법을 익힐 수 있었다.
Share article