자바 5부터 함수형 언어를 포함
빅데이터가 뜨면서 함수형 언어가 필요해짐(현재 scala를 많이 씀)
python, js 모두 함수형 언어를 포함하고 있음
람다식이란,
함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법
기존 코드
int max(int a, int b){
return a > b ? a : b;
}
람다식 코드
(a, b) -> a > b ? a : b
반환 타입과 이름이 없기 때문에,
람다식 == 익명함수(이름이 없는 함수, anonymous function)
하지만 자바에서는 함수(메서드)만 따로 존재할 수 없기 때문에 익명 객체!
함수와 메서드의 차이
- 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어
- 함수는 클래스에 독립적, 메서드는 클래스에 종속적
- 자바에서는 클래스 밖에 있을 수 없기 때문에 전부 메서드
람다식 작성 규칙
int max(int a, int b){
return a > b ? a : b;
}
1. 메서드의 이름과 반환타입을 제거하고 화살표->를 블록{} 앞에 추가한다.
(int a, int b) -> {
return a > b ? a : b;
}
2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 세미콜론; 안붙임)
(int a, int b) -> a > b ? a : b
3. 매개변수의 타입이 추론 가능하면 생략 가능(대부분의 경우 생략 가능)
(a, b) -> a > b ? a : b
람다식 작성 주의사항
1. 매개변수가 하나인 경우, 괄호() 생략 가능(타입이 없을 때만)
(a) -> a * a // a -> a * a (가능)
(int a) -> a * a // int a -> a * a (불가능)
2. 블록 안의 문장이 하나뿐일때, 괄호{} 생략 가능(끝에 세미콜론; 안 붙임)
(int i) -> { System.out.println(i); } // (int i) -> System.out.println(i)
*** 만약 하나뿐인 문장이 return 문이라면 괄호{} 생략이 불가능하지만, return을 대부분 생략하기 때문에 알아만 두기
'이론 > 개인공부' 카테고리의 다른 글
함수 직접 호출과 함수 참조 전달 차이 (0) | 2024.06.19 |
---|---|
함수형 인터페이스 (0) | 2023.01.31 |
자바 스트림(Stream) (0) | 2022.12.30 |
OSI 7계층(OSI 7 Layers) (1) | 2022.08.29 |
정보처리기사 필기 (0) | 2022.04.25 |