Search

3일차) 람다식에 대해서

주제

자바의 람다식은 왜 등장했을까?
람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까?

 주요 내용

키워드

익명 클래스
람다
함수형 프로그래밍
@FunctionalInterface
스트림 API
메소드 레퍼런스

자바의 람다식은 왜 등장했을까?

람다란?

람다는 자바에서 람다식은 간단하게 말하면 메소드를 하나의 식(expression)으로 표현하는 기능
(파라미터) -> { 실행 코드 }의 형태 Thread thread = new Thread(() -> System.out.println("Hello, Lambda!")); thread.start();
Java
복사

등장한 이유

코드 간결성 향상

자바에서 람다식은 함수형 스타일의 프로그래밍을 가능하게 하여, 기존에 비해 훨씬 더 간결한 코드 작성을 돕는다. 기존의 익명 클래스 방식은 코드량이 많고 가독성이 떨어지는 단점이 있었다. 예를 들어, 이벤트 리스너나 스레드 생성 등에 많은 코드를 필요로 했던 작업들을 람다식을 통해 몇 줄 안에 해결할 수 있게 되었다.

함수형 프로그래밍의 도입

자바 8부터 공식적으로 함수형 프로그래밍을 지원하기 시작했고, 람다식은 이 변화의 중심에 있다.
함수형 프로그래밍은 사이드 이펙트를 최소화하고 불변성을 강조, 데이터 처리와 병렬 처리의 효율을 높이는 등 다양한 장점을 제공한다. 람다식을 통해 개발자는 보다 선언적으로 코드를 작성할 수 있게 되어, 의도를 명확하게 표현하고 복잡도를 줄일 수 있다.

멀티코어 프로세싱의 최적화

현대의 컴퓨팅 환경에서는 멀티코어 프로세서의 사용이 일반화되어 있다.
자바의 스트림 API와 함께 람다식은 병렬 실행을 간편하게 만들어 주어, 멀티코어 프로세싱의 이점을 쉽게 활용할 수 있게 해준다.
즉, 람다식을 이용한 스트림 처리는 데이터의 병렬 처리를 추상화하여, 코드를 간결하게 유지하면서도 성능을 개선할 수 있다.

API의 일관성과 확장성 향상

람다식의 도입으로 자바 표준 API는 더욱 일관성 있고 확장성 있게 발전했다.
예를 들어, 컬렉션 라이브러리는 람다식을 사용하여 필터링, 매핑, 집계 등의 연산을 간단한 코드로 처리할 수 있게 되었다. 이는 API를 사용하는 개발자가 보다 직관적이고 효율적으로 라이브러리를 활용할 수 있도록 만들었다.
람다식의 등장은 자바 언어의 변화뿐만 아니라, 개발 패러다임 전반에 걸쳐 큰 영향을 미쳤다. 코드의 간결성을 높이고, 함수형 프로그래밍을 통한 효율적인 데이터 처리를 가능하게 하며, 멀티코어 환경에서의 성능 최적화를 도모한다. 또한, API 사용의 일관성을 향상시키고, 보다 풍부한 프로그래밍 표현력을 제공하여 자바 개발자들이 시대에 맞는 코드를 작성할 수 있도록 지원한다.
이러한 변화들은 자바가 계속해서 현대의 프로그래밍 요구에 부응할 수 있게 만들어준 중요한 발전이다

람다식과 익명 클래스는 어떤 관계가 있을까? 람다식의 문법은 어떻게 될까?

람다식과 익명 클래스 사이의 관계는 대체 관계라고 볼 수 있다.
익명 클래스는 이름 없이 클래스의 선언과 동시에 객체를 생성할 수 있도록 해주는 기능이다.
주로 인터페이스의 구현이나 추상 클래스를 한 번만 사용할 때 유용하게 쓰인다. 하지만 익명 클래스를 사용하면 코드가 길어지고 복잡해질 수 있다.
람다식은 익명 클래스를 사용하는 일부 경우에 대해 더 간결하고 명료한 대안을 제공한다.
특히 함수형 인터페이스(단 하나의 추상 메소드를 가진 인터페이스)를 구현할 때 람다식을 통해 훨씬 간단하게 표현할 수 있다. 이는 코드를 짧고 간결하게 유지하도록 도와주며, 가독성을 높인다.

람다식의 기본 문법

기본 형태: (파라미터) -> { 실행 코드 }
파라미터: 메소드가 받아야 할 인자들을 괄호 안에 정의한다. 타입은 생략 가능.
화살표(->): 파라미터와 실행 코드를 구분.
실행 코드: 실제 실행할 코드 블록. 여러 줄의 코드가 필요한 경우 중괄호({})로 묶는다.

예시

// 파라미터 없이 문자열을 출력하는 람다식 () -> System.out.println("Hello, Lambda!"); // 한 개의 파라미터를 받아 그 값을 출력하는 람다식 x -> System.out.println(x); // 두 개의 파라미터를 받아 덧셈 결과를 반환하는 람다식 (int a, int b) -> { return a + b; };
Java
복사
이렇게 람다식은 익명 클래스보다 훨씬 간결하게 특정 인터페이스의 구현을 표현할 수 있게 해준다.
따라서, 복잡한 익명 클래스 대신 람다식을 사용함으로써 코드의 가독성과 작성 효율을 크게 개선할 수 있다.

참고

챗GPT