프로그래밍 언어/JAVA(자바)

[자바/java] 람다식(Lambda) 정리하기 (1. 개념)

냠냠:) 2021. 4. 11. 15:04

람다식(Lamdba expression)

JDK 1.8(자바 8버전) 이후에 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 되게 해줬다.

기존의 자바를 거의 변경하지 않으면서 함수형 언어의 장점을 잘 접목시키는 데 성공하였다.

 

람다식은 간단히 말해서 메서드를 하나의 '식(Expression)'으로 표현한 것이고, 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줬다.

 

이러한 람다의 특징 때문에 메서드를 람다식으로 표현하면 메서드 이름과 반환 값이 없어지므로, 람다식을 익명 함수(anonymous function)이라고도 한다.

 

 

특징

메서드를 사용하기 위해서는 클래스를 만들어야 하고, 그 클래스 내부에 메서드를 선언한다. 그리고 그 만들어진 클래스의 인스턴스를 생성하고(new) 변수.method() 방식으로 메서드를 사용한다.

 

람다는 위의 과정 없이 람다식 자체만으로도 메서드의 역할을 대신할 수 있다.

 

메서드의 매개변수로 전달되는 것이 가능하고(일급 객체), 메서드의 결과로 반환될 수도 있다.

 

 

람다식 예제

람다식은 '익명 함수'답게 메서드에 이름과 반환 타입을 제거하고 매개변수 선언부()와 몸통{} 사이에 ->를 추가해서 만든다.

메서드 람다식
int sum (int a , int b) {
     return a + b;
}
(int a, int b) -> {return a + b;}
(int a, int b) -> a + b
(a, b) -> a + b
void print(String name, int i) {
    System,out.println(name+"="+i);
}
(String name, int i) - > { System,out.println(name+"="+i);  }
(name, i) -> {  System,out.println(name+"="+i); } 
(name, i) ->  System,out.println(name+"="+i)
int pow(int x){
    return x * x;
}
(int x) -> x * x
(x) -> x * x
x -> x * x
int roll() {
    return (int) (Math.random() * 5);
}
() -> {return (int) (Math.random() * 5);}
() -> (int) (Math.random() * 5) 

람다는 위의 표와 같이 표현한다. 아래와 같은 몇 가지 표현의 특징이 있다.

 

1. 반환 값이 있는 메서드의 경우, return문 내신 '식(expression)'으로 대신할 수 있다. 식으로 표현 시 세미콜론(;)은 붙이지 않는다.

2. 매개변수 중 어느 하나의 타입만 생략하는 건 허용되지 않는다. ex) (String a, b)

3. 매개변수가 하나뿐인 경우 괄호()를 생략할 수 있다. 단, 매개변수의 타입이 있으면 생략할 수 없다.

4. 괄호{} 안의 문장이 하나일 때는 괄호{}를 생략할 수 있다. 이때도 세미콜론(;)은 같이 생략한다.

 

 

 

 

 

-> 람다식(Lambda) 정리하기 (2. 함수형 인터페이스) 바로가기 : tosuccess.tistory.com/181

 

 

[개인 공부를 위한 정리입니다. 참고용으로만 활용하세요]

 

 

 

 

 

 

 

 

 

Reference

Java의 정석 (남궁 성 지음)

반응형