회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
자바(Java)는 시간이 지남에 따라 발전하면서 더욱 효율적이고 간결한 코드를 작성할 수 있도록 다양한 기능을 제공하고 있습니다. 특히 자바 8부터 도입된 람다식과 함수형 인터페이스는 자바에서 함수형 프로그래밍 패러다임을 적용할 수 있게 했는데요. 이 글에서는 자바 람다식(Lambda expression)에 대한 기본 개념을 살펴보고, 람다식의 기본 문법과 함수형 인터페이스의 도입 배경 및 활용법에 대해 정리해 보았습니다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
자바(Java)는 시간이 지남에 따라 발전하면서 더욱 효율적이고 간결한 코드를 작성할 수 있도록 다양한 기능을 제공하고 있습니다. 특히 자바 8부터 도입된 람다식과 함수형 인터페이스는 자바에서 함수형 프로그래밍 패러다임을 적용할 수 있게 했는데요. 이 글에서는 자바 람다식(Lambda expression)에 대한 기본 개념을 살펴보고, 람다식의 기본 문법과 함수형 인터페이스의 도입 배경 및 활용법에 대해 정리해 보았습니다.
함수형 프로그래밍(functional programming)은 프로그래밍 패러다임 중 하나로, 순수 함수를 기반으로 데이터 처리와 상태 변화를 최소화하는 방식의 프로그래밍 기법입니다. 여기서 순수 함수(pure function)란 동일한 입력에 대해 항상 같은 결과를 반환하며, 외부 상태를 변경하지 않는 함수를 말하는데요. 순수 함수를 이용하면 코드의 복잡성에 따른 부작용(side effects)를 최소화하여, 프로그램의 유지 보수와 테스트를 용이하게 할 수 있습니다.
람다식(lambda expressions)은 함수형 프로그래밍에서 중요한 개념으로, 익명 함수(이름이 없는 함수)를 표현하는 간결한 문법을 말합니다. 람다식은 함수를 일급 객체(first-class object)로 취급하여 다른 함수의 인자로 전달하거나, 함수에서 반환값으로 사용할 수 있습니다. 참고로 함수를 인자로 전달받거나, 반환값으로 사용하는 함수를 고차 함수(higher-order function)라고 지칭합니다. (아래 예시 참고)
자바에서 람다식은 Java 8 버전에서 도입되었으며, 이는 자바에서 함수형 프로그래밍을 지원한 중요한 변화로 여겨지고 있습니다. 즉, 자바 람다식을 이용하면 함수를 일급 객체로 다룰 수 있기 때문에 함수형 프로그래밍 패러다임을 자바에서도 적용할 수 있게 되었습니다. 참고로 아래 예시는 앞서 자바스크립트 코드로 작성한 함수형 프로그래밍 코드를 자바로 옮겨서 작성한 것입니다.
람다식은 매개변수(parameter), 화살표(->), 그리고 실행문(expression)으로 구성됩니다. 2개 이상의 매개변수를 사용할 때는 괄호를 넣어야 하며, 매개변수가 없는 경우에는 간단히 ()로 매개변수 부분을 표현하면 됩니다. 매개변수 개수와 상관없이 복잡한 실행문을 작성하려면 중괄호를 사용하여 코드 블록을 만들어야 합니다.
람다식에서는 매개변수에 직접 타입(type)을 명시할 수도 있고 생략할 수도 있습니다. 그리고 실행문은 자동으로 리턴값으로 간주되며, 코드 블록을 사용한 경우에는 명시적으로 return 키워드를 사용해야 합니다.
람다식은 자신이 정의된 유효 범위 내에서만 변수와 객체에 접근할 수 있습니다. 람다식 내부에서 외부 변수를 사용할 경우, 해당 변수는 사실상 final 변수로 취급되어야 합니다. 이를 통해 람다식의 독립성을 보장하고, 안정적인 실행을 가능하게 합니다.
함수형 인터페이스는 추상 메서드(abstract method)를 단 하나만 가지고 있는 인터페이스를 말합니다. 자바에서는 @FunctionalInterface 어노테이션으로 함수형 인터페이스임을 표시하는데요. 만약 @FunctionalInterface 어노테이션을 달고, 추상 메서드를 하나만 가져야 한다는 함수형 인터페이스 조건에 부합하지 않으면 자바에서 에러를 띄우게 됩니다. 참고로 함수형 인터페이스는 아래 예시처럼 자바 람다식을 사용하여 구현할 수 있습니다.
자바에서는 Java 8 버전부터 람다식을 활용할 수 있는 함수형 인터페이스를 도입했습니다. 함수형 인터페이스의 주요 사용 목적은 람다식과 결합하여, 코드의 간결성과 가독성을 향상시키는 것인데요. 즉, 자바에서의 함수형 인터페이스를 도입으로 자바에서도 함수형 프로그래밍 패러다임을 효과적으로 적용할 수 있게 되었습니다.
함수형 인터페이스는 직접 만들어서 사용할 수도 있지만, 자바에서는 기본적으로 사용할 수 있는 다양한 함수형 인터페이스를 제공하고 있습니다. 대표적으로 Runnable, Callable, Comparator, Predicate, Function, Consumer, Supplier 등이 있으며, 이러한 함수형 인터페이스를 통해 대부분의 코드를 처리를 할 수 있습니다. 각 함수형 인터페이스에 대한 자세한 내용은 Java 공식 문서를 참고하시길 바랍니다.
자바 람다식과 함수형 인터페이스를 통해 복잡해 보이는 코드를 간결하게 만들 수 있습니다. 아래 그림의 예시처럼 내림차순으로 2가지 숫자를 비교하여 정렬하는 코드를 짤 때, 자바 람다식과 함수형 인터페이스를 사용하지 않는 경우에는 다소 복잡한 코드를 작성하게 됩니다. 반면, 람다식과 함수형 인터페이스를 사용하면 단 한 줄로 코드를 간단하게 만들 수 있습니다.
자바 람다식과 함수형 인터페이스를 사용하면 익명 클래스의 선언을 대체할 수 있습니다. 이를 통해 코드를 더욱 간결하게 만들고, 익명 클래스의 중복 사용에 따른 코드의 중복을 줄일 수 있습니다. 예를 들어, 아래 그림처럼 문자열 리스트를 정렬하는 경우, 람다식과 함수형 인터페이스를 사용하여 익명 클래스 사용을 대체할 수 있습니다.
자바 스트림 API는 자바 8부터 도입된 API로 컬렉션에 저장된 데이터를 간결하게 처리할 수 있는 기능을 제공하고 있습니다. 특히 스트림 API와 람다식을 결합하여 데이터 필터링, 매핑, 집계 등의 작업을 직관적으로 수행할 수 있는데요. (아래 그림 참고) 이러한 스트림 API를 활용하여 함수형 프로그래밍 스타일로 더욱 직관적이고 간결한 코드를 작성할 수 있습니다.
이렇듯 자바 람다식과 함수형 인터페이스를 이용하면 코드의 간결성과 가독성을 크게 향상시킬 수 있습니다. 그리고 이를 통해 함수형 프로그래밍 패러다임을 자바에서도 적용할 수 있게 되어, 다양한 문제를 효율적으로 해결할 수 있습니다. 따라서 자바 프로그램 개발 시 유지 보수가 용이하고, 직관적인 코드를 작성하기 위해 람다식과 함수형 인터페이스를 적절히 활용해 보시기 바랍니다.
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.