java se 8 에서 람다식 사용하기 – 기초

java 8 에 람다 표현식이 도입되면서 closure를 사용하지 않고도 함수형 언어 비슷한 코드를 작성하는게 가능해졌다. 람다 표현식은 이름이 없는 익명 함수를 의미한다.
람다 표현식에 관심을 둬야하는 몇가지 이유는 다음과 같다.

  • OOP 언어인 Java에서 함수형 코드를 작성할 수 있게 해준다.
  • 람다 표현식을 이용함으로써 간결하고 명확한 코드로 그 의도를 표현할 수 있다.
  • Collection filtering, Iteration , Extraction 등에서 놀라운 코드 생산성을 보인다.

아주 아주 기본적인 람다 표현식에 대해 익혀보자.
Syntax
[code javascript](argument) -> (body)[/code]
0개 이상의 인자를 실행하고자 하는 함수 body 로 전달한다는 의미이며, 이는 람다 표현식의 일반적인 구문이다.
예를 들면 다음과 같이 표현된다.
[code javascript](int a, int b) -> a*b
(Person p) -> { retu p.getAge();}[/code]

다음 코드는 swing 에서 자주 보이는 이벤트 핸들러를 람다로 변경하는 코드이다.
[code java]btnOk.setOnAction( newEventHandler() {
 @Override
 public voidhandle(ActionEvent e) { //버튼 action에 처리할 코드를 여기에 작성
 }
});[/code]
위 코드를 람다 표현식으로 변경하면 다음과 같다.
[code javascript]btnOk.setOnAction( e -> { //버튼 action에 처리할 코드를 여기에 작성
});[/code]

표현식의 또 다른 예로 익명 클래스는 다음과 같이 작성할 수 있다.
[code java]new Thread(
() -> System.out.println(“This is a seperate thread”)
).start();[/code]

마지막으로 collection을 다루는 예제만 더 보고 끝내자.
[code java]ArrayList arrayList= new ArrayList<>();
for(int i=1; i<=100; i++)
arrayList.add(i);

//일반적인 for-loop 문
for(Integer i: arrayList)
{ System.out.println(i);
}

//lambda식으로 표현한 for-loop문
arrayList.forEach( i -> {System.out.println(i);});[/code]

이상으로 람다 표현식이 어떻게 코드 수를 줄이고 Java와 함수형 언어 사이의 갭을 매워주는지에 대해 간략히 알아보았다.

답글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.