반응형
자바에서는 함수형 프로그래밍 패러다임을 지원하기 위해 람다식과 함수형 인터페이스를 도입하였습니다. 이번 포스팅에서는 이 두 개념이 무엇인지, 그리고 어떻게 활용할 수 있는지에 대해 알아보겠습니다.
함수형 인터페이스란?
함수형 인터페이스는 추상 메소드를 하나만 가지고 있는 인터페이스를 가리킵니다. 이 때 '@FunctionalInterface'를 인터페이스 위에 작성하여 단 하나의 추상 메소드만 선언할 수 있도록 제한할 수 있습니다.
예시코드:
@FunctionalInterface
interface MyInterface {
void print(String message);
}
위의 예시코드에서 MyInterface는 '@FunctionalInterface' 애노테이션을 가지고 있으며, print라는 하나의 추상 메소드만을 가지고 있습니다.
람다식이란?
람다식은 이름이 없는 메소드로서 변수처럼 사용이 가능하며, 매개변수로 전달이 가능합니다. 람다식은 익명 메소드(Anonymous Method)라고도 부르며, 함수형 인터페이스를 이용해 간단하게 구현할 수 있습니다.
람다식 문법:
(매개변수 형식 나열, ...) -> 리턴값;
(매개변수 형식 나열, ...) -> {2개 이상의 문장 작성; return 리턴값;}
예시코드:
MyInterface myLambda = (message) -> System.out.println("메시지 출력: " + message);
myLambda.print("안녕하세요!");
이 예시코드에서는 MyInterface를 람다식으로 구현하고 있습니다. 출력문 "메시지 출력: 안녕하세요!"를 출력합니다.
람다식과 함수형 인터페이스 활용 예시
람다식은 매우 간결한 코드로 함수형 인터페이스를 구현할 수 있게 해주므로, 콜백 메소드나 이벤트 핸들러 등을 작성할 때 특히 유용하게 활용됩니다.
예시코드:
@FunctionalInterface
interface Calculator {
int operation(int a, int b);
}
public class Main {
public static void main(String[] args) {
Calculator add = (a, b) -> a + b;
System.out.println("덧셈 결과: " + add.operation(10, 5));
Calculator multiply = (a, b) -> a * b;
System.out.println("곱셈 결과: " + multiply.operation(10, 5));
}
}
예시코드 출력 결과:
덧셈 결과: 15
곱셈 결과: 50
이 코드는 두 가지 연산(덧셈, 곱셈)을 수행하는 람다식을 사용합니다.
- Calculator라는 함수형 인터페이스를 선언하고, 이를 구현하는 람다식 add와 multiply를 정의했습니다.
- add는 두 정수를 더하고, multiply는 두 정수를 곱합니다.
- operation 메소드를 호출하여 연산을 수행하고 결과를 출력합니다. add.operation(10, 5)는 10과 5의 합인 15를, multiply.operation(10, 5)는 10과 5의 곱인 50을 출력합니다.
이처럼, 람다식을 활용하면 코드를 간결하게 작성하면서도 유연성을 확보할 수 있습니다.
람다식의 장점
- 간결한 코드: 함수형 인터페이스를 람다식으로 구현하면 매우 간결한 코드를 작성할 수 있습니다. 이로 인해 가독성이 향상되며, 코드 유지보수도 쉬워집니다.
- 유연성: 람다식을 이용하면, 메소드를 변수처럼 취급하거나 매개변수로 전달할 수 있습니다. 이로 인해 코드의 유연성이 향상됩니다.
이처럼 함수형 인터페이스와 람다식은 자바에서 함수형 프로그래밍을 지원하는 강력한 도구입니다. 이를 이해하고 잘 활용하면 코드를 간결하고 유연하게 작성할 수 있습니다.
반응형
'개발 > Java' 카테고리의 다른 글
Java의 Object 클래스 : toString(), equals(), hashCode() (0) | 2023.07.19 |
---|---|
Java에서의 예외처리(Exception Handling) (0) | 2023.07.19 |
Java에서의 익명 클래스 (Anonymous Classes) (0) | 2023.07.19 |
Java에서의 내부 클래스 (0) | 2023.07.19 |
Java에서의 마커 인터페이스(MarkerInterface) (0) | 2023.07.19 |