1. 람다식이란 ?
람다식은
[일반 함수]
int max(int a, int b)
{
return a > b ? a : b;
}
[람다식 함수]
(a ,b) -> a > b ? a : b;
이런식으로 메소드 이름을 생략하는 것을 의미한다
2. 함수와 메소드의 차이
근본적으로는 동일하나, 함수는 일반적 용어, 메서드는 객체지향 개념 용어이다.
함수는 클래스에 독립적 메서드는 클래스에 종속적이다
3. 람다식의 규칙
4. 람다식 작성 주의사항
매개변수가 하나인 경우, 괄호 ( ) 생략 가능
EX) a - > a a // O
EX) int a -> a a // X
블록 안의 문장이 하나 뿐 일 때 괄호 { } 생략 가능(끝에 ;(세미 콜론) 안 붙인다))
EX) (int i) -> System.out.println(i)
EX) [원래 코드]
(int i) -> { System.out.println(i) ; }
생략시 반드시 세미콜론도 생략
5. 익명 객체
[익명 객체 형태]
new Object( )
{
int max(int a, int b)
{
return a> b ? a: b;
} }
[람다식 변환]
(a, b) -> a> b ? a: b
즉 람다식은 익명 객체의 형태를 띈다. 즉 람다식 = 객체 이다
6. 함수형 인터페이스
[형식]
interface MyFunction { public abstract int max(int a, int b); }
7. 함수형 인터페이스를 사용해야하는 이유
[Ex]
[익명 객체 형태]
Object obj = new Object( )
{
int max(int a, int b)
{
return a> b ? a: b;
} }
[익명 객체 불러오기]
obj.max(3, 5);
해당 형태의 메소드를 불러오게 되면 오류가 발생한다.
왜냐하면 실제 Object obj에는 max라는 메소드는 존재하지 않기 때문이다
그렇기 때문에 함수형 인터페이스를 사용해서 객체를 생성해야한다
위의 함수 인터페이스 예시를 다시 보자
interface MyFunction { public abstract int max(int a, int b); }
이 메소드를 익명 객체의 형태로 만들자
MyFunction mf = new MyFunction( )
{
int max(int a, int b) { return a > b ? a : b; }
}
의 형태로 만들어 주면 오류가 발생하지 않는다
위 형태를 람다식으로 바꿔주면
[람다식 형식 변형]
MyFunction mf = (a,b) -> a > b ? a : b
로 사용할 수 있다