람다식

yookyungmin·2023년 4월 4일
0

람다식

  • 함수(메서드)를 간단한 식으로 표현하는 방법
int max(int a, int b){
return a > b ? a : b;
}

람다식  작성하기
---------------------------
메서드의 이름과 반환타입을 제거하고 {} 블록 앞에 -> 추가
(int a, int b) -> {
	return a > b ? a : b
}

반환값이 있는 경우, 식이나 값만 적고 return 문 생략가능(끝에 ; 붙이지 않는다)
(int a, int b) -> a> b ? a:b

매개변수의 타입이 추론 가능하면 생략가능(대부분의 경우 생략가능)
(a, b) -> a>b ? a:b

메서드
int printVar(String name, int i) {
	System.out.println(name+"="+i)
}
람다식
(name, i) -> System.out.println(name+"="+i)
  • 익명객체(이름이 없는 함수)
    Object obj = new Object(){
    int max(int a, int b) {
    return a>b ? a:b
    }
    }
    int value = obj.max(3.5) // 에러 Object 클래스에 max가 없다.
    사용을 하기 위해선 함수형 인터페이스(단 하나의 추상메서드만 가져야 함)가 필요
    interface MyFunction{
    public abstract int max(int a, int b);
    }

MyFunction f = new MyFunction(){
public int max(int a, int b) {
return a > b ? a : b
}
} //ok. MyFunction에 max()가 있다.
MyFunction f = (a, b) -> a > b ? a : b
함수형 인터페이스는 객체 생성이 가능하다

  • 함수와 메서드의 차이
    근본적으로는 동일 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적

람다식 작성 시 주의 사항

  1. 매개변수가 하나인 경우 괄호() 생략가능(타입이 없을떄만)
  2. 블록 안의 문장이 하나뿐 일때 괄호{} 생략가능 ; 생략
  3. 하나뿐인 문장이 return 문이면 괄호{} 생략불가

0개의 댓글