Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 리눅스
- jenkins github 연동
- REACT
- 리액트
- nginx
- jenkins jdk
- jenkins maven
- Jenkins
- docker network
- Jenkins Pipeline
- java
- MySQL
- spring
- jenkins 설치
- MongoDB
- gradle
- CI/CD
- jpa
- grafana
- error
- IntelliJ
- jenkins github
- jenkins install
- Docker
- subnetmask
- vue.js
- JavaScript
- Linux
- grpc
- Spring Boot
Archives
- Today
- Total
뭐든 즐기면서 ;)
JAVA 람다식 / 람다식 본문
728x90
※ 람다식 : 람다식 표현을 사용하여 함수를 작성할 경우, 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수의 한 종류라고 볼 수 있습니다.
- 익명함수란 : 일회성 함수이다.
자세히 설명하자면, 보통 JAVA에서 메소드를 사용하기 위해서는 클래스를 만들어 메소드를 작성하고, 객체를 생성하여 메소드를 호출합니다. 이때 해당 메소드가 일회성으로 한 번 만 사용하기 위한 메소드라고 가정해 봅니다. 단 한 번을 사용하기 위해 클래스 작성 및 객체 생성, 그리고 메소드 호출의 번거로운 단계를 거쳐야 합니다. 이 번거로운 과정을 생략하기 위해 사용하는 것이 람다식(익명함수)입니다.
람다식 자체만으로 메소드 역할을 수행할 수 있습니다.
- 장점
- 코드의 간결성(가독성)
- 지연연산 수행
- 병렬처리 가능
- 단점
- 재사용이 불가능합니다.
- 디버깅이 어렵습니다.
- 람다식을 무작위로 사용하게 되면, 비슷한 함수가 중복 생성되어 오히려 가독성이 떨어질 수 있습니다.
- 재귀로 만들 경우에 사용하는 것은 부적합합니다.
1. 람다식 문법
() -> {}
() -> 1
() -> { return 1; }
(int x) -> x+1
(x) -> x+1
x -> x+1
(int x) -> { return x+1; }
x -> { return x+1; }
(int x, int y) -> x+y
(x, y) -> x+y
(x, y) -> { return x+y; }
(String lam) -> lam.length()
lam -> lam.length()
(Thread lamT) -> { lamT.start(); }
lamT -> { lamT.start(); }
//잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y
2. 람다식 특징
- 1급 객체이다.
- 변수나 데이터 구조 안에 담을 수 있습니다.
- 반환값으로 전달할 수 있습니다.
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능합니다.
- Stream API의 매개변수로 전달이 가능합니다.
- 람다식은 순수 함수 <-> 일반 함수
- (객체지향 언어인 JAVA에서는 이를 구분하기 위해 함수형 인터페이스를 탄생시켰다.)
- 함수형 인터페이스를 반환합니다.
- 함수를 변수처럼 선언합니다.
// 기존 익명함수
public class Lambda {
public static void main(String[] args) {
System.out.println(
new MyLambdaFunction() {
public int max(int a, int b) {
return a > b ? a : b;
}
}.max(3, 5)
); // end of System.out
} // end of main function
}
// 함수형 인터페이스 작성
@FunctionalInterface
interface LambdaInterface {
int max(int a, int b);
}
// 람다식을 사용하여 함수형 인터페이스를 반환 받아 선언한 변수에 대입.
public class Lambda {
public static void main(String[] args) {
LambdaInterface lambda = (int a, int b) -> a > b ? a : b; // 람다식을 이용한 익명함수
System.out.println( lambda.max(3, 5) );
}
}
* 참고 : JAVA에서 기본 적으로 제공하는 함수형 인터페이스 4가지 : https://tadaiswhatever.tistory.com/23
* 1급 객체에 대해서는 추가로 다루도록 하겠습니다.
728x90
'BACK > JAVA' 카테고리의 다른 글
JAVA 함수형 인터페이스란 (0) | 2021.11.15 |
---|---|
JAVA 개념 / JAVA 이론 / JAVA 기본개념 (0) | 2021.11.14 |
JAVA 함수형 인터페이스 API (0) | 2021.11.11 |
JAVA CMD / javac (0) | 2021.11.02 |
JAVA Multi Thread환경 동시성 제어 (0) | 2021.10.22 |
Comments