[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 키워드가 적용된 것처럼 새로운 값을 할당할 수는 없다.
'JAVA' 카테고리의 다른 글
Java Atomic Type 이해하기(AtomicBoolean, AtomicInteger) (3) | 2019.08.29 |
---|---|
자바 스트림(Stream) 이해하기 (feat.JAVA 8) (0) | 2019.08.06 |
java.util.function 표준 API 파헤치기(feat.람다식) (0) | 2019.07.28 |
Java 가비지 컬렉터(GC) 이해하기 (1) | 2019.07.24 |
[JAVA] 람다식(Lambda Expression)이란? (0) | 2019.01.30 |