본문 바로가기

잡학다식/IT 컬럼

[IT 첫걸음] JAVA8편 람다(lambda)

728x90
반응형



1. 람다 표현식(lambda)은 나중에 한번 이상 실행할 수 있도록 전달할 수 있는 코드 블록이다.
- 과거에 자바는 어딘가에 코드 블록을 전달하는 일이 쉽지 않았다.(즉, 단순히 코드 블록을 전달할 수 없음.)
자바는 객체지향 언어기 때문에, 원하는 코드가 있는 메서드를 포함하는 클래스의 객체를 생성해야했음.

2. 람다 표현식 문법

- (파라미터, 화살표->,표현식)

* 예 : (String first, String second) -> Integer.compare(first.length(), second.length())
* 자바는 타입 결합이 강한 언어기 때문에 타입도 지정해야함.

- 표현식 하나로 표현할 수 없는 계산은 중괄호{}를 사용하고 명시적 return문 사용.
*예 : (String first, String second) ->{
if (first.length() < second.length()) return -1;
else return 0;
}

- 파라미터 받지 않는 경우
*예: ()->{.....표현식}
()->{ for(int i = 0; i<1000; i++) dowork(); }

- 람다 표현식의 파라미터를 추정할 수 있는 경우 타입 생략 가능.
*예: Comparatr<String> comp = (first, second)
->Integer.compare(first.length(), second.length());

- 메서드에서 추정되는 타입 한개를 파라미터로 괄호 생략 가능.
*예: EventHandler<ActionEvent> listener = event -> System.out.println("test");

- 람다 표현식의 결과 타입은 지정하지 않는다. 결과 타입은 항상 문맥으로 부터 추정됨.

* 람다 파라미터에 애너테이션(annotation)이나 final 수정자 붙일 수 있음. (메서드 파라미터와 동일한 방식)
(final String name) -> ...
(@NonNull String name) -> ...

- 단일 추상 메서드를 갖춘 인터페이스 객체를 기대할때 람다 표현식 사용 가능.
위와 같은 인터페이스를 함수형 인터페이스라고 함.
[람다 표현식을 객체가 아니라 함수로 생각하고, 함수형 인터페이스에 전달할 수 있다고 인식하는 것이 가장 좋음.]

728x90
반응형