본문 바로가기

언어/Java

람다(lambda)의 소개

다음과 같은 익명 클래스로 짠 코드가 있다고 가정하자.

 

interface Printable {
	void print(String s);
}

class Lambda {
	public static void main(String[] args) {
    	Printable prn = new Printable() {  // 익명 클래스
        	public void print(String s)
            {
            	System.out.println(s);
            }
        }
        
        prn.print("What is Lambda");
    }
}

 

이는 람다로 다음과 같이 나타낼 수 있다.

 

interface Printable {
	void print(String s);
}

class Lambda {
	public static void main(String[] args) {
    	Printable prn = (s)-> {System.out.println(s)};
        prn.print("What is Lambda");
    }
}

이 코드의 의미는 Printable 인터페이스가 인스턴스를 생성하지 못 하는 이유는 print메소드의 구현 뿐이기 때문에

그 print메소드를

public void print(String s)
{
	System.out.println(s);
}

이렇게 구현하고 그렇게 구현한 클래스에서 인스턴스를 생성하여 Printable 참조변수가 그 인스턴스를 참조하게 하겠다는 의미를 지닌다.

 

이 때 s가 String형임은 Printable 인터페이스를 통해 컴파일러가 유추할 수 있으므로 자료형을 생략해줄 수 있다.

 

이제 우리는 익명클래스에 빗대어 람다식을 이해하였다.

하지만 늘 익명클래스를 떠올리며 람다식을 이해하려고 하면 코드를 이해하는 속도가 느려지기 때문에 좀더 직관적으로 받아들여보자.

 

Printable prn = (s) -> {System.out.println(s)};

이제 이 코드의 오른쪽은 Printable 인터페이스의 구현이라고 바로 받아들이자.

 

람다식으로 인자 전달도 가능하다.

 

method((s) -> System.out.println(s));  // void method(Printable prn) {...}

 

 

'언어 > Java' 카테고리의 다른 글

정의되어 있는 함수형 인터페이스  (0) 2023.02.07
람다와 함수형 인터페이스  (0) 2023.02.07
네스티드(Nested) 클래스와 이너(Inner) 클래스  (0) 2023.02.03
매개변수의 가변 인자 선언  (0) 2023.02.03
열거형  (0) 2023.02.03