Hyunebee

Lambda 본문

Java/Java의 정석

Lambda

Hyunebee 2022. 3. 30. 19:20

람다식

메서드를 하나의 식처럼 표현한것

메서드를 람다식으로 표현하면서 메서드의 이름반환값이 없어지므로 익명함수라고도 합니다.

 

 

람다식의 장점

1. 코드를 간결하게 만들수 있다.

2. 가독성이 증가

3. 생산성이 증가

 

람다식의 단점

1. 재사용이 불가능하다.

2. 재귀호출에 사용하기에 부적절 하다.

3. 디버깅이 어렵다. 

 

함수형 인터페이스

위에서 람다식 ≒ 메소드 같은 것처럼 설명했지만 메소드보다는 익명 클래스의 객체와 동등하다. 

 

interface CompareTool {
    public abstract int getMaxNum(int num1, int num2);
}
CompareTool cTool = new CompareTool() {
    @Override
    public int getMaxNum(int num1, int num2) {
        return num1 > num2? num1 : num2;
    }
};

 

 

위의 익명 객체에서 우리가 사용할 려는 getMaxNum 메소드는 어떻게 호출해야 할까요??

우리는 참조변수를 통해 인스턴스(객체)를 호출할 수 있습니다.

참조변수는 참조형 이기 때문에 클래스 또는 인터페이스가 가능합니다.

 

그러면 람다식으로 정의된 메소드는 어떻게 호출할까요 ? => 동일하게 참조변수

 

 

CompareTool cTool2 = (num1, num2) -> { return num1 > num2? num1 : num2; };

이처럼 동일하게 사용할 수 있습니다. 그러니 람다식은 익명 클래스의 객체와 동등하다고 할 수 있습니다. 

 

이처럼 CompareTool 인터페이스를 구현한 익명 객체를 람다식으로 대체 가능한 이유는 람다식의 매개변수의 타입개수 그리고 반환값이 일치하기 때문입니다.

 

위처럼 인터페이스를 통해 람다식을 다루는것이 기존 자바의 규칙을 어기지 않으면서 사용되어 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 부르게 되었습니다.

 

단. 람다식과 인터페이스의 메서드가 1:1로 연결되어야 하기때문에 오직 하나의 추상 메서드만 정의합니다.! -> 이것을 도와주기위한 @FunctionalInterface 어노테이션이 있습니다.

 

 

 

 

 

 

'Java > Java의 정석' 카테고리의 다른 글

람다식  (0) 2022.03.17
쓰레드의 실행과 제어  (0) 2022.03.15
싱글 쓰레드 멀티 쓰레드  (0) 2022.03.15
Thread  (0) 2022.03.13
Enum  (0) 2022.03.12