2021-07-05 강의록_람다식(Lambda)

MIN.DI·2021년 7월 5일
0

강의록

목록 보기
31/54

메소드를 객체 밖으로 빼낸 것이 함수. 즉 함수는 non-oop언어이다.
자바에서 객체소속없이 함수 단독으로 존재할 수 없으므로, 인터페이스를 implements하는 익명구현객체를 생성한다

람다식은 익명함수 객체를 생성한다고 하지만 정확히는 익명구현객체
즉 인터페이스를 구현하는 객체를 생성하는것이 람다식이다.

자바는 람다식을 함수적 인터페이스(매개변수를 가진 코드블록)의 익명 구현객체로 취급

어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있다.

람다식 작성법

(타입 매개변수) -> {실행문;... };
예 >> (int a) -> {System,out.println(a);}

람다식은 간단한 기능을, 간결하게 구현하기 위해 작성한다.
구현식이 너무 길어지는 코드는 람다식으로 작성하는 의미가 없음.

( ) : 추상메소드의 매개변수 선언블록 그대로 가져옴. 추상메소드의 매개변수 개수만큼 기술.
{ } : 메소드 오버라이딩 하기 위한 실행블록.
표현식은 값을 생성한다. =>> 익명구현객체(타겟타입)

람다식에서 우선 알아야 할 개념

  1. 함수적 인터페이스 (Functional Interface)
  • 오직 단 하나의 추상메소드를 가진 인터페이스
  • 인터페이스에 올 수 있는 멤버4가지 중에, 추상 메소드를 제외한 나머지 멤버 개수는 제한 없다.
    (인터페이스 구성멤버 : static final상수 필드, 추상메소드, 디폴트메소드, static메소드)
  • @FunctionalInterface 어노테이션이 붙어있는 인터페이스
    단, 이 어노테이션이 없다고 해서 추상메소드가 오직 한개 뿐인 인터페이스가 Functional이 아닌 것은 아니다.
    어노테이션은 컴파일러에게 정보 제공 역할이므로, 붙이는 것을 권장할 뿐임!
  1. 람다식이 구현할 함수적 인터페이스 => 람다식의 타겟타입이라고 한다.

  1. 추상메소드에 매개변수와 리턴타입 모두 없을 때
  2. 추상메소드에 매개변수 있고, 리턴타입 없을 때
  3. 추상메소드에 매개변수, 리턴타입 모두 있을 때

람다식 생략 조건

  1. 람다식 중괄호 안에서 수행할 실행문작이 오직 1개만 있으면, { } 기호 생략 가능
// 아래 두 문장은 같은 결과 출력한다.
fi = () -> {log.info("method call"); };
fi = () -> log.info("method call");
  1. Functional Interface 추상메소에 매개변수가 있을 때,
    이 매개변수 타입은 컴파일러의 타입추론 기능에 의해 생략 가능
//fi=(int x) -> {		//추상메소드의 매개변수 그대로 가져옴. 
fi=(x) -> {			//매개변수타입 int생략
	int result = x * 5;
	log.info(result);
};				 //람다식으로 타겟타입의 추상메소드 구현-> 익명구현객체 생성
  1. 매개변수 선언부의 매개변수가 오직 1개이면 ( ) 기호 생략 가능
fi = x -> log.info(x*5);
  1. 구현할 추상메소드가 리턴타입이 있고, 람다식의 실행문장이 오직 1개이고,
    그 실행문장이 값을 반환하는 return 문장이라면, return 키워드 생략 가능.
//아래 세 구현식은 모두 같은 결과 출력한다.

//////// 생략조건 2. 매개변수 타입 생략 가능
fi = (x, y) -> {		
		int result = x+ y;
		return result;
};

//////// 생략조건 1. 실행문장 1개일 때 { } 기호 생략 가능 
fi = (x, y) -> { return x + y; } ;	

//////// 생략조건 4. return 키워드 생략 가능
fi = (x, y) -> x + y;			
profile
내가 보려고 쓰는 블로그

0개의 댓글