[Java] 람다(Lambda)
Updated:
람다 대수 : 함수를 단순하게 표현하는 방법
람다(Lambda) 란?
- 람다 대수는 이름을 가질 필요 없다 : 익명 함수
- 커링 (Curring) : 입력값이 둘 이상인 함수는 최종적으로 1개 입력만 받는 람다 대수로 단순화 가능
- 일급객체(First Class citizen) : 다른 객체에 적용 가능한 연산을 모두 지원하는 객체. 함수를 값으로 사용하기도 하며 파라미터로 전달, 변수 대입 등 연산 가능
장단점
설명 | |
---|---|
장점 | 함수를 좀 더 간단하게 표현 |
반복문 삭제 가능 | |
멀티쓰레드 활용하여 병렬 처리 가능 | |
지연연상을 수행하여 불필요한 연산 수행 가능 | |
단점 | 호출이 까다로움 |
stream 사용 시 단순 for, 단순 while문의 경우 성능이 떨어짐 | |
불필요하게 사용하면 가독성이 떨어짐 |
표현식
- (매개변수목록) -> { 함수몸체 }
- 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략 가능
- 매개변수가 하나인 경우에는 괄호(())를 생략 가능
- 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략가능 (이때 세미콜론(;)은 붙이지 않음)
- 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략할 수 없음
- return 문 대신 표현식을 사용 가능, 이때 반환값은 표현식의 결과값 (이때 세미콜론(;)은 붙이지 않음)
기존 자바 문법과 비교
-
기존
new Thread(new Runnable() { @Override public void run() { System.out.println("Welcome Heejin blog"); } }).start();
-
람다식
new Thread(()->{ System.out.println("Welcome Heejin blog"); }).start();
함수형 인터페이스(functional interface)
- 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야만 한다
- 함수형 인터페이스 : 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입
- 함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가진다
- 참조변수의타입 참조변수의이름 = 람다 표현식
-
@FunctionalInterface : 해당 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식
@FunctionalInterface interface Calc { // 함수형 인터페이스의 선언 public int min(int x, int y); } public class Lambda02 { public static void main(String[] args){ Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현 System.out.println(minNum.min(3, 4)); // 함수형 인터페이스의 사 } } //결과 : 3
참고
- https://www.tcpschool.com/java/java_lambda_concept
- https://khj93.tistory.com/entry/JAVA-람다식Rambda란-무엇이고-사용법
- https://khj93.tistory.com/entry/JAVA-람다식Rambda란-무엇이고-사용법
- https://mangkyu.tistory.com/112
Leave a comment