요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

자바(Java)는 시간이 지남에 따라 발전하면서 더욱 효율적이고 간결한 코드를 작성할 수 있도록 다양한 기능을 제공하고 있습니다. 특히 자바 8부터 도입된 람다식과 함수형 인터페이스는 자바에서 함수형 프로그래밍 패러다임을 적용할 수 있게 했는데요. 이 글에서는 자바 람다식(Lambda expression)에 대한 기본 개념을 살펴보고, 람다식의 기본 문법과 함수형 인터페이스의 도입 배경 및 활용법에 대해 정리해 보았습니다.

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

코드 가독성 높이는 자바 람다식과 함수형 인터페이스

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

자바(Java)는 시간이 지남에 따라 발전하면서 더욱 효율적이고 간결한 코드를 작성할 수 있도록 다양한 기능을 제공하고 있습니다. 특히 자바 8부터 도입된 람다식과 함수형 인터페이스는 자바에서 함수형 프로그래밍 패러다임을 적용할 수 있게 했는데요. 이 글에서는 자바 람다식(Lambda expression)에 대한 기본 개념을 살펴보고, 람다식의 기본 문법과 함수형 인터페이스의 도입 배경 및 활용법에 대해 정리해 보았습니다.

 

자바 람다식의 개념

1) 함수형 프로그래밍 개요

함수형 프로그래밍(functional programming)은 프로그래밍 패러다임 중 하나로, 순수 함수를 기반으로 데이터 처리와 상태 변화를 최소화하는 방식의 프로그래밍 기법입니다. 여기서 순수 함수(pure function)란 동일한 입력에 대해 항상 같은 결과를 반환하며, 외부 상태를 변경하지 않는 함수를 말하는데요. 순수 함수를 이용하면 코드의 복잡성에 따른 부작용(side effects)를 최소화하여, 프로그램의 유지 보수와 테스트를 용이하게 할 수 있습니다.

 

2) 함수형 프로그래밍과 람다식

람다식(lambda expressions)은 함수형 프로그래밍에서 중요한 개념으로, 익명 함수(이름이 없는 함수)를 표현하는 간결한 문법을 말합니다. 람다식은 함수를 일급 객체(first-class object)로 취급하여 다른 함수의 인자로 전달하거나, 함수에서 반환값으로 사용할 수 있습니다. 참고로 함수를 인자로 전달받거나, 반환값으로 사용하는 함수를 고차 함수(higher-order function)라고 지칭합니다. (아래 예시 참고)

 

자바 람다식(Lambda expression)
<출처: 작가>

 

3) 자바에서의 람다식

자바에서 람다식은 Java 8 버전에서 도입되었으며, 이는 자바에서 함수형 프로그래밍을 지원한 중요한 변화로 여겨지고 있습니다. 즉, 자바 람다식을 이용하면 함수를 일급 객체로 다룰 수 있기 때문에 함수형 프로그래밍 패러다임을 자바에서도 적용할 수 있게 되었습니다. 참고로 아래 예시는 앞서 자바스크립트 코드로 작성한 함수형 프로그래밍 코드를 자바로 옮겨서 작성한 것입니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

 

자바 람다식 기본 문법

1) 람다식 기본 문법

람다식은 매개변수(parameter), 화살표(->), 그리고 실행문(expression)으로 구성됩니다. 2개 이상의 매개변수를 사용할 때는 괄호를 넣어야 하며, 매개변수가 없는 경우에는 간단히 ()로 매개변수 부분을 표현하면 됩니다. 매개변수 개수와 상관없이 복잡한 실행문을 작성하려면 중괄호를 사용하여 코드 블록을 만들어야 합니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

람다식에서는 매개변수에 직접 타입(type)을 명시할 수도 있고 생략할 수도 있습니다. 그리고 실행문은 자동으로 리턴값으로 간주되며, 코드 블록을 사용한 경우에는 명시적으로 return 키워드를 사용해야 합니다.

 

2) 람다식의 유효 범위

람다식은 자신이 정의된 유효 범위 내에서만 변수와 객체에 접근할 수 있습니다. 람다식 내부에서 외부 변수를 사용할 경우, 해당 변수는 사실상 final 변수로 취급되어야 합니다. 이를 통해 람다식의 독립성을 보장하고, 안정적인 실행을 가능하게 합니다.

 

 

자바에서의 함수형 인터페이스 도입

1) 함수형 인터페이스란?

함수형 인터페이스는 추상 메서드(abstract method)를 단 하나만 가지고 있는 인터페이스를 말합니다. 자바에서는 @FunctionalInterface 어노테이션으로 함수형 인터페이스임을 표시하는데요. 만약 @FunctionalInterface 어노테이션을 달고, 추상 메서드를 하나만 가져야 한다는 함수형 인터페이스 조건에 부합하지 않으면 자바에서 에러를 띄우게 됩니다. 참고로 함수형 인터페이스는 아래 예시처럼 자바 람다식을 사용하여 구현할 수 있습니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

2) 함수형 인터페이스 도입과 사용 목적

자바에서는 Java 8 버전부터 람다식을 활용할 수 있는 함수형 인터페이스를 도입했습니다. 함수형 인터페이스의 주요 사용 목적은 람다식과 결합하여, 코드의 간결성과 가독성을 향상시키는 것인데요. 즉, 자바에서의 함수형 인터페이스를 도입으로 자바에서도 함수형 프로그래밍 패러다임을 효과적으로 적용할 수 있게 되었습니다.

 

3) 자주 사용되는 함수형 인터페이스

함수형 인터페이스는 직접 만들어서 사용할 수도 있지만, 자바에서는 기본적으로 사용할 수 있는 다양한 함수형 인터페이스를 제공하고 있습니다. 대표적으로 Runnable, Callable, Comparator, Predicate, Function, Consumer, Supplier 등이 있으며, 이러한 함수형 인터페이스를 통해 대부분의 코드를 처리를 할 수 있습니다. 각 함수형 인터페이스에 대한 자세한 내용은 Java 공식 문서를 참고하시길 바랍니다.

 

자바 람다식(Lambda expression)
<출처: Java 8 공식문서>

 

 

자바 람다식과 함수형 인터페이스의 활용

1) 간결한 코드 만들기

자바 람다식과 함수형 인터페이스를 통해 복잡해 보이는 코드를 간결하게 만들 수 있습니다. 아래 그림의 예시처럼 내림차순으로 2가지 숫자를 비교하여 정렬하는 코드를 짤 때, 자바 람다식과 함수형 인터페이스를 사용하지 않는 경우에는 다소 복잡한 코드를 작성하게 됩니다. 반면, 람다식과 함수형 인터페이스를 사용하면 단 한 줄로 코드를 간단하게 만들 수 있습니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

2) 익명 클래스 사용 대체

자바 람다식과 함수형 인터페이스를 사용하면 익명 클래스의 선언을 대체할 수 있습니다. 이를 통해 코드를 더욱 간결하게 만들고, 익명 클래스의 중복 사용에 따른 코드의 중복을 줄일 수 있습니다. 예를 들어, 아래 그림처럼 문자열 리스트를 정렬하는 경우, 람다식과 함수형 인터페이스를 사용하여 익명 클래스 사용을 대체할 수 있습니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

3) 스트림 API 활용

자바 스트림 API는 자바 8부터 도입된 API로 컬렉션에 저장된 데이터를 간결하게 처리할 수 있는 기능을 제공하고 있습니다. 특히 스트림 API와 람다식을 결합하여 데이터 필터링, 매핑, 집계 등의 작업을 직관적으로 수행할 수 있는데요. (아래 그림 참고) 이러한 스트림 API를 활용하여 함수형 프로그래밍 스타일로 더욱 직관적이고 간결한 코드를 작성할 수 있습니다.

 

자바 람다식(Lambda expression)
<출처: 작가>

 

마치며

이렇듯 자바 람다식과 함수형 인터페이스를 이용하면 코드의 간결성과 가독성을 크게 향상시킬 수 있습니다. 그리고 이를 통해 함수형 프로그래밍 패러다임을 자바에서도 적용할 수 있게 되어, 다양한 문제를 효율적으로 해결할 수 있습니다. 따라서 자바 프로그램 개발 시 유지 보수가 용이하고, 직관적인 코드를 작성하기 위해 람다식과 함수형 인터페이스를 적절히 활용해 보시기 바랍니다.

 

요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.

좋아요

댓글

공유

공유

댓글 0
Developer, Blogger
198
명 알림 받는 중

작가 홈

Developer, Blogger
198
명 알림 받는 중
곰씨네 IT를 비롯하여 다양한 블로그를 운영 중인 개발자입니다. 2010년부터 LG CNS에서 소프트웨어 엔지니어로 근무하며, LG전자 물류 시스템 구축, 스마트 TV OS 개발, LG화학 모바일 프로젝트 등에 참여했습니다. 2017년 미국으로 이주해 프리랜서 개발자로 전향했으며, 현재는 AI와 머신러닝 분야로의 경력 확장을 위해 미국 매사추세츠 주립대에서 컴퓨터 공학 석사 과정을 병행하고 있습니다.

운영 중인 블로그
곰씨네 IT: https://gomcine.tistory.com
곰씨네USA: https://gomcineusa.tistory.com
코리얼티USA: https://korealtyusa.com

저서
개발자가 영어도 잘해야 하나요? (English for Developer)
http://gilbut.co/c/24026188iO
함께 스크랩한 콘텐츠
같은 분야를 다룬 콘텐츠
인기 있는 콘텐츠

좋아요

댓글

스크랩

공유

공유

지금 회원가입하고,
요즘IT가 PICK한 뉴스레터를 받아보세요!

회원가입하기
요즘IT의 멤버가 되어주세요! 요즘IT의 멤버가 되어주세요!
요즘IT의 멤버가 되어주세요!
모든 콘텐츠를 편하게 보고 스크랩할 수 있어요.
모든 콘텐츠를 편하게 보고 스크랩 하기
매주 PICK한 콘텐츠를 뉴스레터로 받을 수 있어요.
매주 PICK한 콘텐츠를 뉴스레터로 받기
로그인하고 무료로 사용하기