Coding/Study
[JAVA] 람다식 Lambda
mimi
2023. 10. 5. 14:49
728x90
반응형
람다식
- 익명 함수(anonymout function)를 생성하기 위한 식
- 객체 지향 언어보다는 함수 지향 언어에 가깝다.
- 자바 코드가 간결해진다.
- 컬렉션의 요솔르 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.
- (매개변수) -> { 실행코드 } 형태로 작성
람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체
// Runnable 인터페이스 익명 구현 객체 생성하는 전형적인 코드
Runnable runnable = new Runnable() {
public void run() { ... }
}
// 익명 구현 객체를 람다식으로 표현
Runnable runnable = () -> { ... };
타겟 타입과 함수적 인터페이스(@FunctionalInterface)
- 람다식의 타겟 타입은 하나의 추상 메소드가 선언된 인터페이스(두 개 이상 선언된 것은 타겟 타입 사용 불가)
- @FunctionalInterface 어노테이션을 인터페이스 선언 시 붙여주면
두 개 이상의 추상 메소드가 선언되면 컴파일러가 체킹해 오류를 발생해준다. (선택사항)
@FunctionalInterface
public interface MyFunctionalInterface {
public void method();
public void otherMethod(); // 컴파일 오류
}
정적 메소드와 인스턴스 메소드 참조
- 정적(static) 메소드를 참조할 경우 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술
public class Main {
public static int staticMethod(int x, int y) { // 정적 메소드
return x + y;
}
public int insatanceMethod(int x, int y) { // 인스턴스 메소드
return x + y;
}
public static void main(String[] args) {
IntBinaryOperator oper;
// 정적 메소드 참조
oper = (x, y) -> Main.staticMethod(x, y);
System.out.println("결과1 : " + oper.applyAsInt(1, 2));
oper = Main::staticMethod;
System.out.println("결과2 : " + oper.applyAsInt(3, 4));
/// 인스턴스 메소드 참조
Main obj = new Main();
oper = (x, y) -> obj.insatanceMethod(x, y);
System.out.println("결과3 : " + oper.applyAsInt(5, 6));
oper = obj :: insatanceMethod;
System.out.println("결과4 : " + oper.applyAsInt(7, 8));
}
}
728x90
반응형