위로
아래
람다식
람다(Lambda)식
- 자바 8부터 사용 가능.
- 함수를 단순하게 표현하는 방법
- 익명 함수(Anonymous function)로 구동.
- 장점
- 코드의 간결성
- 지연연산 수행 (불필요한 연산 최소화)
- 병렬 처리 가능 (멀티 스레드 이용)
람다식 유의사항
- 람다식 외부에서 선언된 변수와 동일한 이름의 변수를 람다식에서 선언할 수 없다
- 람다식에서 사용된 지역변수는 final
- 람다식의 this 키워드는 람다식을 실행한 외부 객체를 의미
람다식 표현식
- 매개변수 화살표(->)를 함수몸체로 이용하여 사용 가능
- 매개변수가 하나면 괄호 생략 가능
- 매개변수가 없으면 ()만 쓰기
- 단일 실행문이면 괄호{} 생략 가능 (return도 생략)
// 매개변수로 int x를 받고, -x로 만들어 반환하는 람다식 기본형
n = (int x) -> {return -x;}
//위의 람다식 변형들
n = (x) -> {return -x;}
n = x -> {return -x;}
n = (int x) -> -x;
n = (x) -> -x;
n = x -> -x;
//매개변수가 없는 람다식
p = () -> {System.out.println("안녕");}
p = () -> System.out.println("안녕");
// 둘 중에 max값 찾기 (기본형)
public int Max(int x, int y) {
return x >= y ? x : y;
}
// 둘 중에 max값 찾기 (람다형)
Max max = (x, y) -> x >= y ? x : y;
메소드 레퍼런스 ::
메소드 레퍼런스, 메소드 참조, 더블클론, :: (method reference)
- 람다식의 축약형
- 메소드가 이미 정의된 경우에 사용 가능
- 자바 8버전 이상
- static 메소드의 경우 인스턴스 대신 클래스 이름을 사용할 수 있다.
정적 메소드 레퍼런스
//정적 메소드 레퍼런스
클래스이름 :: 정적 메소드
//예시
m = d -> Math.abs(d); // 람다식
m = Math :: abs; // 메소드 레퍼런스
인스턴스 메소드 레퍼런스
// 인스턴스 메소드 레퍼런스
객체이름 :: 인스턴스 메소드
클래스이름 :: 인스턴스 메소드
//예시 (객체이름 :: 인스턴스 메소드)
p = (a,b) -> a.charAt(b);
p = String :: charAt;
//예시 (클래스이름 :: 인스턴스 메소드)
c = (a,b) -> utils.add(a,b);
c = utils :: add;
생성자 레퍼런스
// 생성자 레퍼런스
클래스이름 :: new
배열타입이름 :: new
//예시 (클래스이름 :: new)
s = x -> new String(x);
s = String :: new;
//예시 (배열타입이름 :: new)
i = x -> new Integer[x];
i = Integer :: new;