반응형

[JAVA] 다양한 형태의 람다식(예제)


지난 포스팅에서 람다식이란 무엇인지 이해하기 위해 함수형 프로그래밍을 간단하게 알아보고, 자바 코드로 객체지향 방법과 함수형 프로그래밍 방법을 각각 비교해보았다.


[Programming/JAVA] - [JAVA] 람다식(Lambda Expression)이란?


이번 포스팅에서는 지난 포스팅에 이어 그 람다식에 대해 조금 더 구체적으로 알아보고자 한다.



다양한 형태의 람다식


람다식은 파라미터 및 리턴 타입에 따라 다양한 형태로 작성된다. 람다식은 축약형이 많은데 이때 형태가 기존의 코드와 사뭇 다르기 때문에 작성법을 많이 연습해야 손에 익을 것 같다.


람다식은 소괄호로 묶인 파라미터 그룹람다 연산자(->), 중괄호로 묶인 실행문으로 구성된다.


(파라미터1, 파라미터2, ...) -> {실행문;}


이 표현식의 의미는 '선언된 파라미터들을 이용해서 실행문을 실행하라!' 정도이다. 파라미터 부분은 실행문 블록에서 사용하기 위한 값을 제공하는 일반적인 메소드의 파라미터 선언과 동일하다.


(number1, number2) -> {System.out.println(number1+number2);}


만약 파라미터가 하나일 경우 아래와 같이 소괄호를 생략할 수 있다. (+ 실행 문장이 한 문장일 경우 중괄호 역시 생략할 수 있다.) 이때 실행문의 마지막을 의미하는 세미콜론(;) 역시 생략한다.


msg -> System.out.println(msg)


하지만 파라미터가 하나도 없는 경우는 소괄호를 생략할 수 없다.


() -> System.out.println("hello")


리턴이 필요한 경우 일반적인 함수의 구현처럼 return 키워드를 이용해서 리턴한다.


(msg) -> {

System.out.prinln(msg);

return msg;

}


실행문이 단순히 리턴 문 하나로만 구성되는 경우 중괄호와 함께 return 키워드도 생략할 수 있다. 하지만 중괄호를 생략하고 return 문을 사용할 수는 없다.


(msg) -> "Hello" + msg          --------   가능

(msg) -> return "Hello" + msg    --------   가능




람다의 실행 블록에서 변수 참조


람다식은 컴파일러에 의해 익명의 내부 클래스로 처리되기 때문에 변수에 대한 참조 규칙도 동일하다.


  • 외부 클래스의 멤버를 자유롭게 사용할 수 있다.
  • 자바 8부터는 일반 로컬 변수도 사용할 수 있는데 final 키워드가 적용된 것처럼 새로운 값을 할당할 수는 없다.

하지만 this를 사용하는 방법은 약간 다르다. 람다식에서 this는 타겟 인터페이스가 아닌 외부 클래스를 나타낸다. 따라서 람다식 내에서 this와 외부클래스.this는 동일한 객체를 나타낸다.

다음 포스팅에서는 자바 8에서 빈번히 사용되는 함수형 인터페이스들을 살펴보도록 하겠다.

반응형
반응형