위로 아래

람다식

람다(Lambda)식

  1. 자바 8부터 사용 가능.
  2. 함수를 단순하게 표현하는 방법
  3. 익명 함수(Anonymous function)로 구동.
  4. 장점
    1. 코드의 간결성 
    2. 지연연산 수행 (불필요한 연산 최소화)
    3. 병렬 처리 가능 (멀티 스레드 이용)

 

람다식 유의사항

  1. 람다식 외부에서 선언된 변수와 동일한 이름의 변수를 람다식에서 선언할 수 없다
  2. 람다식에서 사용된 지역변수는 final
  3. 람다식의 this 키워드는 람다식을 실행한 외부 객체를 의미

 

 

람다식 표현식

  1. 매개변수 화살표(->)를 함수몸체로 이용하여 사용 가능
  2. 매개변수가 하나면 괄호 생략 가능
  3. 매개변수가 없으면 ()만 쓰기 
  4. 단일 실행문이면 괄호{} 생략 가능 (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)

  1. 람다식의 축약형
  2. 메소드가 이미 정의된 경우에 사용 가능
  3. 자바 8버전 이상
  4. 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;