-
람다식이란?프로그래밍 기초 공부 2022. 11. 26. 14:37
람다식
- 메서드를 하나의 "식"으로 표현한 것
- 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, "익명함수" 라고도 함
- 함수명을 선언하고 사용하는 것이 아닌 식별자 없이 실행가능한 함수
특징
- 메서드가 1번만 사용되고 메서드 길이가 짧은 경우 매우 유용
- 절차형 프로그래밍, 객체지향 프로그래밍과는 사뭇 다르게 함수의 구현과 호출만으로 프로그램을 만드는 방식인 함수형 프로그래밍에서 자주 사용됨
- 자바8부터 도입이 되었으며, 람다식을 익명함수로 만드는 것인데 익명함수는 일급객체 특징
- 자바에서 메서드는 혼자서 생존할 수 없음
- 객체가 아니기 때문에 클래스도 만들어야 하고, 객체도 생성해야 쓸 수 있음
- 하지만 람다식으로 인해 변수처럼 스스로 존재하며 매개변수로 전달하거나 결과로 반환될 수 있음
- 즉, 람다식으로 메서드는 객체로 취급
람다식 작성
int select(int a, int b){ return a > b ? a : b; } // 일반적인 함수 (a,b) -> a > b ? a : b // 람다식
람다식 사용 이유
- 람다식을 쓰지 않을 때보다 코드가 간결해짐
- 필터링 및 매핑시 집계결과를 쉽게 가져올 수 있음
- 메서드를 호출하기 위한 불필요한 class, 객체 생성의 과정 불필요
- 람다식 자체로 메서드의 매개변수로 전달되어지는 것이 가능
- 결과로 반환 가능
- 메서드를 변수처럼 다루는 것이 가능해짐
- 결과로 반환 가능
일급객체
일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체
함수를 값으로 사용 할 수도 있으며 파라미터로 전달 및 변수에 대입 하기와 같은 연산들이 가능
함수형 프로그래밍에 1급객체라는 말을 자주 사용
Kotlin 함수는 1급 객체지만, Java는 1급객체가 아님
3가지 조건을 만족하면 1급객체
- 함수를 변수에 할당할 수 있어야 함
- 다른 함수의 파라미터로 함수 객체를 넘길 수 있어야 함
- 함수의 리턴값으로 함수 객체를 리턴할 수 있어야 함
함수형 인터페이스
- 추상메서드가 1개만 정의된 인터페이스
- 람다식을 다루기 위한 인터페이스
- 오직 하나의 추상 메서드만 정의되어 있어야 한다는 제약
- static메서드와 default메서드의 개수에는 제약이 없음
- 자바에서 모든 메서드는 클래스 내에 포함되어야 함, 람다식은 익명 클래스의 객체라고 보면 됨
익명클래스
- 클래스 선언과 객체의 생성을 동시에 하여 한번만 사용될 수 있고 오직 하나의 객체만 생성할 수 있는 일회용 클래스
함수형 인터페이스 타입의 매개변수와 반환타입
- 람다식을 매개변수로 지정 가능하며, 반환타입으로 이용할 수 있음
람다식의 타입과 형변환
- 람다식은 익명 객체이므로 타입이 없고, 함수형 인터페이스로 람다식을 참조할 수 있는 것일 뿐 람다식의 타입이 함수형 인터페이스의 타입과 일치하는 것은 아님
- 실제로 타입이 없는것은 아니고, 타입은 있지만 컴파일러가 임의로 이름을 정하기때문에 알 수 없음
람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주
외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않음'프로그래밍 기초 공부' 카테고리의 다른 글
인증과 인가란? (0) 2022.12.02 대칭키, 비대칭키란? (0) 2022.12.02 Serverless란? (0) 2022.11.26 Microservice Architecture와 Monolithic Architecture이란? (0) 2022.11.26 실수 계산에서 오차가 생기는 이유 (0) 2022.11.17