티스토리 뷰
1. 람다식(Lambda Expression)
[의미] 식별자 없이 실행 가능한 함수 표현식 (자바 8부터 지원)
[장점]
1) 코드가 매우 간결해진다.
2) 컬랙션 요소(대용량 데이터)를 필터링 또는 맵핑해서 쉽게 집계할 수 있다.
기존 제네릭 사용 예
new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World."); } }).start();
new Thread(()->{ System.out.println("Hello World."); }).start();
2. 람다식 기본 문법
람다식의 구성
(Long val1, String val2) -> { val1 + val2.length(); }
1) int 매개 변수 a의 값을 콘솔에 출력하기 위해 다음과 람다식을 작성할 수 있다.
(int a) -> {System.out.println(a); }
2) 매게 변수 타입은 런타임 시에 대입되는 값에 따라 자동인식 가능하다.
(a) -> {System.out.println(a); }
3) 하나의 매개변수만 있다면 괄호 생략, 하나의 실행문만 있다면 중괄호 생략 가능하다.
a -> System.out.println(a);
4) 매개 변수가 없다면 빈 괄호를 반드시 사용해야 한다.
()-> System.out.println(a);
5) 중괄호를 실행하고 결과값을 리턴해야 한다면 다음과 같이 사용 가능하다.
(x, y) -> { return x + y; }
6) 중괄호에 return문만 있을 경우
(x, y) -> { x + y }
3. 타겟 타입과 함수적 인터페이스
* 람다식은 인터페이스 변수에 대입된다. 인터페이스는 직접 객체화할 수 없기 때문에 구현 클래스가 필요한데, 람다식은 익명 구현 클래스를 생성하고 객체화한다. 람다식은 대입될 인터페이스의 종류에 따라 작성 방법이 달라 지기 때문에 람다식이 대입될 인터페이스를 타겟타입(target type)이라고 한다.
* 함수적 인터페이스
[의미] 하나의 추상 메소드가 선언된 인터페이스
함수적 인터페이스를 작성할 때 두 개 이상의 추상 메소드가 선언되지 않도록 컴파일러가 체킹해
주는 기능이 있는데, 인터페이스 선언 시 @FunctionInterface 어노테티션을 붙이면 된다.
@FunctionInterface 어노테티션 public interface MyfunctionlInterface{ public void method(); public void otherMethod(); // 컴파일 오류 }
이 인터페이스를 타겟 타입으로 갖는 람다식은 다음과 같은 형태로 작성 가능하다.
1) 매개변수와 리턴값이 없는 람다식 : MyfunctionlInterface fi = () -> { 실행코드; }
fi.method();
2) 매개변수가 있는 람다식 : MyfunctionlInterface fi = (x) -> { 실행코드; }
fi.method(5);
3) 리턴값이 있는 람다식 : MyfunctionlInterface fi = (x, y) -> { return 값; }
int result = fi.method(2, 5);
4. 표준 API의 함수적 인터페이스
*자바8부터 java.util.function 표준 API 패키지로 제공
종류 매개값 리턴값 비고
Consumer 있음 없음
public interface Consumer<T>{
void accept(T t);
}
Supplier 없음 있음
public interface Supplier<T>{
T get();
}
Function 있음 있음
public interface Function<T, R>{
R apply(T t);
}
// 매개값을 리턴값으로 매핑(타입변환)
Operator 있음 있음
public interface IntBinaryOperator{
applyAsInt(int, int);
}
// 매개값을 연산하고 결과를 리턴
Predicate 있음 true/fase
public interface Predicate<T>{
boolean test(T t);
}
// 리턴 타입 boolean
※ 신용권, ‘ 이것이 자바다. Java 프로그래밍 정복’, 2015, p.678-716 참조
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 젠킨스
- Stack
- Independentsoft
- Windows 서비스 등록
- Queue
- Gradle
- sort
- 443
- setDoInput
- PoolingHttpClientConnectionManager
- insertion
- java
- 선 없이
- 개발 설정
- 그라파나
- LinkedList
- 안드로이드
- 과거 버전 사용
- array
- code push
- 빌드 세팅
- call back
- 링크드리스트
- springboot
- 암호
- docker
- react-native
- 정렬
- elasticsearch
- 스머핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함