본문 바로가기
개발언어/Java : 자바

자바 쉽게 배우기 21 - 람다

by 개발자D 2023. 9. 18.

람다

잠시 쉬어가는 글로 람다에 대해서 설명드릴까 합니다. 사실 람다가 자바에 도입된 것은 jdk1.8부터(2014년)입니다. 비교적 최근에 추가된 것이죠. 람다가 도입되면서 객체 지향 언어인 자바가 함수형 언어로의 성격까지 갖게 되었습니다. 

 

❓ 함수형 언어란 무엇인가요?

함수형 언어는 함수형 기능들을 사용해 변수의 사용을 최소화한 프로그래밍에 사용되는 언어입니다.

람다

람다가 무엇이기에 함수형 언어로의 성격을 더해준 것일까요? 람다란 메서드를 하나의 식으로 표현한 것입니다.

 

람다를 사용하면 메서드를 간략한 방식으로 표현할 수 있습니다. 또한 람다식을 매개변수로 전달하거나 메서드의 결과로 반환하는 것도 가능합니다. 

 

메서드를 람다식으로 변환하기

일반 메서드

반환타입 메서드명 (매개변수) {
	...
    return ~~~
}

 

람다식 

- 기본 람다식

(타입 매개변수) -> { ...; return ~~~; }

 

- 타입 생략 : 매개변수 타입이 추론 가능할 경우

(매개변수) -> { ...; return ~~~; }

 

- 매개변수 소괄호(()) 생략 : 매개변수가 하나이면서 타입이 생략된 경우

매개변수 -> { ...; return ~~~; }

 

- 중괄호 ({}) 생략 : 괄호 안의 문장이 하나일 경우

매개변수 -> ...
매개변수 -> ~~~

 

람다의 사용

인터페이스를 구현한 익명 객체 대신 사용

익명객체 자리에 람다식을 그대로 삽입하여 사용할 수 있습니다. 이때, 당연히 인터페이스에 정의된 메서드의 선언부와 람다식의 선언부가 일치해야 합니다. 람다식을 사용하기 위해 사용되는 인터페이스를 함수형 인터페이스라 합니다. @FunctionalInterface 애노테이션을 달고, 하나의 추상 메서드를 정의합니다.

// Interface MyInterface

@FunctionalInterface
interface MyInterface {
	public abstract int add(int a, int b);
}

 

// 익명 객체 사용
MyInterface f = new MyInterface(){
            public int add(int a, int b) {
                return a + b;
            }
        };
                
int sum = f.add(3, 5);

 

// 람다식 사용
MyInterface f = (a, b) -> a + b;
int sum = f.add(3, 5);

 

java.util.function패키지에서 이미 정의된 함수형 인터페이스를 사용할 수 있습니다.

 

java.util.function (Java Platform SE 8 )

Interface Summary  Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u

docs.oracle.com

예시 )

java.lang.Runnable, Supplier<T>, Consumer<T>, Function<T,R>, Predicate<T>, BiConsumer<T,U>, BiPredicate<T,U>, BiFunction<T,U,R>, UnaryOperator<T>, BinaryOperator<T>, DoubleToIntFunction, ToIntFunction<T>, IntoFunction<R>, ObjIntConsumer<T>

 

람다의 규칙

  1. 람다 내에서 사용하는 지역변수는 final을 붙이지 않아도 final로 간주됩니다.
  2. 외부 지역변수와 같은 이름의 매개변수를 사용할 수 없습니다.

람다를 사용하면 메서드를 간결하게 표현할 수 있고 함수식을 매개변수나 반환값으로 보낼 수 있습니다. 가독성을 높이기 때문에 직관적인 이해를 도울 수 있습니다. 람다를 적절히 활용하여 코드를 개선해 보세요. 다음 글에서는 입출력 스트림에 대해 설명합니다.

 

자바 쉽게 배우기 22 - 입출력 스트림

스트림 스트림은 물줄기를 의미합니다. 입출력 스트림 또한 입출력을 위한 흐름을 의미합니다. 데이터는 출발지에서 목적지로 향합니다. 이 향하는 길을 이어주는 것이 입출력 스트림입니다.

devdharu.tistory.com