베하!
안녕하세요 여러분, 일단고입니다.
여름 휴가는 잘 다녀오셨나요?
오늘은 개발하면서 알게된 ‘람다 캡처링’에 대해서 알아보겠습니다.
요즘은 소스 관리와 협업의 필요성 때문이라도 람다식을 이용한 선언형 프로그래밍이 유행 혹은 지향하는 조직들이 많이 있습니다. 각종 개발 언어를 가리지 않는 이 람다식에 대해 먼저 알아볼게요!
람다식이란
- 람다식이란(Lambda Expressions) 메서드를 하나의 식으로 표현한 것입니다. 즉 함수의 식별자와 반환값 없이 함수를 구현하기 때문에 익명함수(anonymous function)라고 부르기도 합니다.
- 람다식은 java언어에서는 하나의 익명 클래스로 분류됩니다. 메서드는 클래스안에서 선언되고 객체에 의해 사용되기 때문에 클래스로 봐야 합니다.
- 쉽게 얘기해서 람다식은 클래스를 작성하는 번거로움 및 지저분한 소스가 만들어지는 것을 방지하게 해주고 함수를 매개변수로 이용하여 목적을 한눈에 파악할 수 있기도 합니다.
int sum(int a, int b){
return a+b
}
(a,b) -> a+b;
함수형 인터페이스
함수형 인터페이스란 하나의 추상 메서드만을 가지는 인터페이스를 말합니다. 람다식과 인터페이스의 메서드가 1:1로 매칭시켜서 사용할 수 있게 됩니다.
람다식은 주로 함수형 인터페이스의 구현을 통해 사용됩니다. Java에서는 @FunctionalInterface 어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있습니다.
@FunctionalInterface 를 사용하면 2개 이상의 추상 메서드가 되지 않도록 방지 => 컴파일 에러를 발생시킵니다.
@FunctionalInterface
interface btcFunctionInterface{
public abstract int calculate(int a, int b);
}
람다식 사용하기
함수형 인터페이스에서 오직 하나의 추상 메서드를 정의하고 매개변수의 타입과 개수 그리고 반환값을 일치시키면 됩니다.
람다식을 활용한 경우를 확인해보면 다음과 같습니다.
1. 컬렉션의 간단한 처리
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(number -> System.out.println(number));
2. 스레드의 생성
Thread thread = new Thread(() -> System.out.println("Hello from a thread"));
thread.start();
thread 생성시 람다식을 사용하지 않으면 다음과 같은 코드가 될 수 있습니다.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from Runnable");
}
};);
thread.start();
형식으로 사용해서 코드의 복잡성을 올려야 할 수 있었습니다.
실제로 Thread 클래스의 생성자를 확인하면
Runnable 인터페이스를 매개변수로 받고있는데 이 인터페이스는 함수형 인터페이스인 것을 확인할 수 있습니다. 곧 바로 추상메서드인 run을 정의해서 스레드를 한눈에 정의해서 시작할 수 있습니다.
3. 함수형 인터페이스 람다로 사용
btcFunctionInterface addition = (a, b) -> a + b;
btcFunctionInterface subtraction = (a, b) -> a - b;
int result1 = addition.calculate(10, 5); // 15
int result2 = subtraction.calculate(10, 5); // 5
오늘은 람다식에 대해서 알아봤습니다.
저는 조금씩 날씨가 시원해지는 것 같은데 여러분은 어떤가요?
가을이 다가오고있나요?
환절기가 되면 건강부터 챙기셔야 합니다.
그럼 다음시간에 만나요!
'IT KNOWLEDGE' 카테고리의 다른 글
Firebase란? (0) | 2023.08.27 |
---|---|
Vert.x는? (1) | 2023.08.25 |
RBAC과 ABAC (0) | 2023.08.18 |
[Youtube API] YouTube Data API로 동영상 ID 추출하기 (0) | 2023.08.17 |
정렬 알고리즘 개념 (0) | 2023.08.14 |
댓글