람다식 정리

김상복·2022년 3월 30일
0

JAVA

목록 보기
4/4

1. 람다식이란 ?

  • 이름 없는 함수, anonymous function이라고 한다

람다식은

[일반 함수]
int max(int a, int b)
{
return a > b ? a : b;
}

[람다식 함수]
(a ,b) -> a > b ? a : b;

이런식으로 메소드 이름을 생략하는 것을 의미한다

2. 함수와 메소드의 차이

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

3. 람다식의 규칙

  • 반환값이 있는 경우, 식이나 값만 적고 return문 , ;(세미 콜론) 생략 가능
  • 매개변수의 타입이 추론 가능하면 생략가능(대부분이 생략이 가능하다)

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 위에 @FunctionalInterface를 달아주면 함수형 인터페이스임을 알려준다 / 작성이 옳은지 확인해주는 어노테이션
  • 주의사항 : 함수형 인터페이스는 단 하나의 추상 메서드만 가져야한다

[형식]

interface MyFunction { public abstract int max(int a, int b); }

7. 함수형 인터페이스를 사용해야하는 이유

  • JAVA에서는 객체를 만들 때 참조 변수를 필요로 한다.
    람다식을 사용할 때 모든 클래스의 조상격인 Object로 생성을 예로 했으나 이러면 문제가 발생한다

[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

로 사용할 수 있다

profile
초보 개발자

0개의 댓글