티스토리 뷰

Java

람다식1

zzangyeon 2021. 9. 8. 09:32

1. 람다식이란?

메서드를 하나의 식(expression)으로 표현한 것이다.

람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다.

익명함수 라고도 한다.

람다식을 통해 메서드를 매개변수로 전달하고, 메서드의 결과로 반환될 수도 있다.

메서드를 변수처럼 다루는 것이 가능해진 것이다.

 

2. 표현법

1. 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{} 사이에 ->를 추가한다.

2. 반환 값이 있는 경우, retur문 대신 '식'으로 대신할 수 있다. 식의 연산결과가 자동적으로 반환값이 된다.

이때는 문장이 아닌 식이므로 끝에 ;를 붙이지 않는다. 

3. 매개변수의 타입은 추론이 가능한 경우는 생략가능하다. 대부분의 경우도 생략이 가능하다.

int max(int a, int b){
	return a > b? a: b;
}
(a, b) -> {a > b? a: b}

 

3. 함수형 인터페이스

자바에서 모든 메서드는 클래스 내에 포함되어야 한다. 람다식은 익명 클래스의 객체와 동등하다.

(int a, int b) -> a > b? a : b 

        ||

new Object(){
 int max(int a, int b){
 	return a > b? a : b;
    }
 }

익명 객체의 메서드는 참조변수가 있어야 호출 할 수 있다. 익명 객체의 주소를 f라는 참조변수에 저장하면.

참조 변수의 타입은 뭘로 해야 할까?

max라는 메서드를 호출 할 수 있는 클래스 또는 인터페이스여야 한다.

max()라는 메서드가 정의된 MyFunction인터페이스가 정의되어 있다고 가정하면 이와같다.

MyFunction f = new MyFunction(){
		public int max(int a, int b){
                  return a > b? a : b;
                  }
               }; 
                   
int big = f.max(5,3); //익명 객체의 메서드를 호출

이 람다식을 다루기 위한 인터페이스를 '함수형 인터페이스'로 부른다.

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

함수형 인터페이스는 오직 하나의 추상 메서드만 정의되어 있어야 한다. 그래야 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문이다. static메서드와 default메서드의 개수는 제약이 없다.

 

4. 함수형 인터페이스 타입의 매개변수, 반환타입

1) 매개변수

@Funtionalnterface
interface MyFunction{
    void myMethod();
}

void aMethod(MyFunction f){
   f.myMethod(); //람다식 호출
}

MyFunction f = () -> System.out.prinln("myMethod()");
aMethod(f);
		||
aMethod(() -> System.out.println("myMethod()"));

2) 반환타입

MyFunction meMethod(){
   MyFunction f = () ->{};
   return f; //람다식 반환
}
   		||   
MyFunction myMethod(){
   return () -> {};
}

참조변수 없이 람다식을 직접 매개변수로 지정하는 것도 가능하다.

 

람다식을 참조변수로 다룰 수 있다는 것은 메서드를 통해 람다식을 주고 받을 수 있다는 것을 의미한다.

즉, 변수처럼 메서드를 주고받는 것이 가능해진 것이다.

사실상 메서드가 아니라 객체를 주고받는 것이라 근본적으로 달라진 것은 아무것도 없지만,

람다식 덕분에 코드가 더 간결하고 이해하기 쉬워졌다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함