m1ndy5's coding blog

람다식 본문

백엔드 with java/java

람다식

정민됴 2023. 12. 12. 14:25

람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소
자바에서 메서드를 사용하려면 항상 클래스 객체를 먼저 생성한 후 생성한 객체로 메서드를 호출해야 한다.
이를 해결하기 위해 나온 방법이 람다식이다.
단 하나의 추상 메서드만을 포함하는 인터페이스를 함수형 인터페이스라고 하고, 이 함수형 인터페이스의 호출 및 기능을 구현하는 방법을 새롭게 정의한 문법이 바로 람다식이다.
정리하자면 람다식은 기존의 객체 지향 프로그램 체계 안에서 함수형 프로그래밍을 가능하게 하는 기법이라고 생각할 수 있다.

객체 지향 구조 내에서 람다식 적용 과정

interface A {
    void abc();
}
class B implements A {
    public void abc(){...}
}

// 사용할 때
A a = new B();
a.abc();

이 내용을

A a = () -> {};

이렇게 익명 이너클래스의 메서드 정의 부분만 가져와 메서드를 정의하고 호출한다.
람다식은 익명 이너클래서의 축약된 형태라고 보면 된다.

람다식의 기본 문법 및 약식 표현

리턴타입 메서드명(입력매개변수){
    // 메서드 내용
}

이거를

(입력매개변수) -> {
    // 메서드 내용
}

이렇게 사용할 수 있다.

람다식의 약식 표현

// 중괄호 안의 실행문이 1개일 때 중괄호 생략 가능
A a = () -> System.out.println("테스트");

// 매개변수 타입의 생략이 가능하고, 매개변수가 1개일 때 () 생략 가능
A a = a -> {...};

// return 구문만 포함할 때 return 생략 가능
// 중괄호도 반드시 같이 생략해 주어야함
A a = (int a, int b) -> a+b;

정의돼 있는 인스턴스 메서드 참조

클래스 객체::인스턴스 메서드명

interface A{
    void abc();
}

class B{
    void bcd(){
        System.out.println("메서드");
    }
}

B b = new B();
A a = b::bcd;

정의돼 있는 정적 메서드 참조

클래스명::정적 메서드명

interface A{
    void abc();
}
class B{
    static void bcd(){
        System.out.println("메서드");
    }
}

A a = B::bcd;

첫 번째 매개변수로 전달된 객체의 인스턴스 메서드 참조

interface A{
    void abc(B b, int k);
}
class B{
    void bcd(int k){
        System.out.println(k);
    }
}

A a1 = (B b, int k) -> {b.bcd(k);};
A a2 = B::bcd;
a2.abc(new B(), 3);

생성자 참조

interface A{
    int[] abc(int len);
}

interface B{
    C abc();
}

A a = int[]::new;
B b = C::new;

'백엔드 with java > java' 카테고리의 다른 글

String VS StringBuffer  (0) 2024.03.25
ABOUT SERVLET, WAS, SERVLET CONTAINER  (0) 2023.06.22
자바 클래스 & 객체  (0) 2023.05.29
ABOUT JAVA, 환경 변수 등록  (0) 2023.05.29