java&spring

[Java] 람다식

sungjine 2016. 12. 17. 23:47
반응형

먼저 람다식을 설명하면 메서드를 하나의 식으로 표현하는 것으로 객체 지향 방식이라기보다는 함수 지향 방식에 가깝다.

 * 함수 지향 방식에 가깝다고 해도 자바에서 람다 또한 결국 객체이다.

 

때문에 람다식은 함수 형태 만으로도 사용할 수 있다.

import java.util.stream.IntStream;

IntStream.range(0, 10).forEach(n -> System.out.println(n));

아래는 다양하게 작성해본 기본적인 람다식의 형태이다.

(int n, String str) -> { return n + str; }
(int n, String str) -> n + str
(n, str) -> n + str
(str) -> str + 1
str -> str
() -> "Hello"
() -> {}

람다식을 그냥 사용할 수는 없고 람다식을 사용하는 특정 메서드에 위와 같이 바로 사용하던가 람다식을 담아둘 수 있는 객체를 만든 후에 사용해야 하는데 interface를 활용하는 방법이 있다.

@FunctionalInterface
interface InterfaceRamda {
	int test(int i);
}

public class ramdaTest {
    public static void main(String[] args){
        InterfaceRamda interfaceRamda = i -> i + 1;
        System.out.println(interfaceRamda.test(11));
    }
}

출력되는 결과는 12이다.

 

주의할 점은 interface에 하나의 메서드만 존재해야 한다는 것이다.

그래서 람다라는 것을 명시적으로 표현하기 위해 @FunctionalInterface를 쓰는데 두 개 이상의 메서드가 존재하면 에러가 난다.

반응형