익명객체와 함수형인터페이스 '람다식'
by 키위먹고싶다객체지향개념에서 함수(function)대신 메서드(method)라는 용어를 사용하는 이유?
- 메서드는 함수와 같은 의미이지만, 특정클래스안에 속해야 한다는 제약이 있다. 그래서 함수와 같은 의미의 다른 용어를 사용한다. 그러나 람다식을 통해 메서드가 하나의 독립적인 기능을 하기 때문에 함수라는 용어를 사용하게 되었다.
람다식(Lambda expression)이란?
- 람다식은 간단히 말해서 메서드를 하나의 '식(expression)'d으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명함수(anonymous function)'이라고도 한다.
- 모든 메서드는 클래스의 포함되어야 하므로 클래스도 새로 만들고 그 클래스의 객체도 만들어야 해당 메서드를 호출 할 수 있다. 그러나 람다식은 람다식 자체만으로 이 메서드의 역할을 대신할 수 있다.
- 람다식은 익명 클래스의 객체와 동등하다.
class LambdaTest {
public static void main(String[] args) {
MyFunction f1 = new MyFunction() {
@Override
public int Number() {
return (int)(Math.random() * 6) + 1;
}
};
int a = f1.Number();
System.out.println(a);
MyFunction f2 = () -> (int)(Math.random() * 6) + 1;
int b = f2.Number();
System.out.println(b);
}
}
interface MyFunction {
public abstract int Number();
}
참조변수 f1에 인터페이스를 구현한 익명클래스의 객체를 생성했다. 그리고 그 참조변수를 통해 객체의 메서드를 호출해서 변수 a에 저장했다. 참조변수 f2에는 익명클래스의 객체를 람다식으로 표현했다. 그리고 변수 b에 익명 객체의 메서드를 호출해서 저장했다.
이렇게 MyFunction인터페이스를 구현한 익명 객체를 람다식으로 표현할 수 있는 이유는 람다식도 실제로 익명객체이고, 인터페이스를 구현한 객체의 메서드 Number()와 람다식의 매개변수 타입과 개수, 반환타입이 일치하기 때문이다.
이렇게 람다식을 다루기 위한 인터페이스를 '함수형 인터페이스'라고 한다.
단, 함수형 인터페이스에는 오직 하나의 추상메서드만 정의되어 있어야 한다. 그래야 람다식과 인터페이스의 메서드가 1대1로 연결될 수 있기 때문이다.
'java' 카테고리의 다른 글
자바의 실행과정(JVM,JIT) (1) | 2022.01.15 |
---|---|
stream에 대한 정리 (0) | 2021.12.22 |
ThreadPoolExecutor을 이용한 효율적인 멀티쓰레드 이용 (0) | 2021.12.15 |
split 과 toCharArray (0) | 2021.12.15 |
Comparable, Comparator 에 관하여 (0) | 2021.12.12 |
블로그의 정보
kiwi
키위먹고싶다