JAVA의 람다식(lambda) 사용법 및 다양한 작성 예제
Java의 람다식
■ 자바의 람다식
✓ 람다식(lambda)
- 자바에서는 함수를 메서드라고 부르고 메서드의 형태로 존재
- 자바 람다식의 구조
. (argument) -> { body } 구문을 사용하여 작성
@매개변수 리스트
- 함수에 전달되는 매개변수들이 나열
- 매개변수를 생략하면 컴파일러가 추론 기능을 이용하여 알아서 처리
- 매개변수가 하나인 경우 괄호를 생략 가능
@애로우 토큰
- 매개변수 리스트와 함수 코드를 분리시키는 역할
- "->" 기호: 매개변수들을 전달하여 함수 바디 { }에 작성된 코드를 실행
@함수 바디
- 함수의 코드
- 중괄호 ({ })로 둘러싸는 것이 일반적이지만, 한 문장인 경우 중괄호({ })를 생략 가능
- 한 문장이더라도 return 문이 있으면 반드시 중괄호로 둘러싸야함
람다식을 이용하는 방법
■ 람다식을 이용하는 방법
✓ 람다식(lambda) 만들기: 람다식은 함수형 인터페이스를 구현한 객체
- 자바에서 람다식은 함수형 인터페이스에 선언된 추상 메서드를 구현하는 방식으로 작성
- 함수형 인터페이스(functional interface) 작성
. 추상 메서드 하나만 있는 인터페이스
1
2
3
4
5
|
@FunctionalInterface
interface MyFunction { // 함수형 인터페이스
int calc(int x, int y); // 추상 메소드
}
|
cs |
.@FunctionalInterface
컴파일러에게 함수형 인터페이스임을 알리는 annotation
=> 컴파일러에게 인터페이스가 추상 메서드가 1개만 있는 함수형 인터페이스인지 확인하도록 하여,
처음부터 잘못된 인터페이스 작성을 막는 장점
- 함수형 인터페이스의 추상 메서드를 람다식으로 구현
. 람다식의 작성: 함수형 인터페이스의 추상 메서드에 코드를 작성
. 인터페이스를 상속받은 클래스를 명시적으로 작성하지 않고 익명의 클래스가 만들어지는 방식
@@ 자바에서 람다식은 함수형 인터페이스를 구현한 객체(익명의 클래스)로 다루어
람다식을 인터페이스 타입의 변수에 치환 가능!!
람다식을 이용한 다양한 예제
인자 x, y를 받아들여 x+y를 리턴하는 람다식 만들기
1) LambdaEx.java
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
31
32
33
34
35
|
package practice;
//인자 x, y를 받아들여 x+y를 리턴하는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface MyFunction {
int calc(int x, int y);
}
public class LambdaEx {
public LambdaEx() {
// MyFunction f = new MyFunction() {
//
// @Override
// public int calc(int x, int y) {
// return x+y;
// }
//
// };
MyFunction f1 = (x, y) -> {return x+y;};
System.out.println("f1의 결과: " + f1.calc(22, 100));
MyFunction f2 = (x, y) -> {return x-y;};
System.out.println("f2의 결과: " + f2.calc(99, 9));
}
public static void main(String[] args) {
new LambdaEx();
}
}
|
cs |
인자 x를 받아들여 제곱을 리턴하는 람다식 만들기
2) LambdaEx.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package practice;
//인자 x를 받아들여 제곱을 리턴하는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface Myfunction2 {
int calc(int x);
}
public class LambdaEx2 {
public LambdaEx2() {
//Myfunction2 fsquare = (x) -> {return x*x;};
Myfunction2 fsquare = (x) -> {return x*x;};
System.out.println("fsquare의 결과: "+fsquare.calc(5));
}
public static void main(String[] args) {
new LambdaEx2();
}
}
|
cs |
//매개변수가 없는 람다식 만들기
3) LambdaEx3.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package practice;
//매개변수가 없는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface MyFunction3 {
void print();
}
public class LambdaEx3 {
public LambdaEx3() {
MyFunction3 fprint = () -> {System.out.println("Yoon's Dev");};
fprint.print();
}
public static void main(String[] args) {
new LambdaEx3();
}
}
|
cs |
//메서드의 인자로 람다식 전달
4) LambdaEx4.java
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
|
package practice;
//메소드의 인자로 람다식 전달
//함수형 인터페이스
@FunctionalInterface
interface MyFunction4 {
int calc(int x, int y);
}
public class LambdaEx4 {
//메소드 정의 (메소드의 인자로 람다식 전달)
static void printMultiply(int x, int y, MyFunction4 f) {
System.out.println("실행 결과: " + f.calc(x, y));
}
public LambdaEx4() {
printMultiply(100, 100, (x, y) -> {return x * y;});
}
public static void main(String[] args) {
new LambdaEx4();
}
}
|
cs |
//제네릭을 이용한 함수형 인터페이스
5) lambdaEx5.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package practice;
//제네릭을 이용한 함수형 인터페이스
@FunctionalInterface
interface MyFunction5<T>{
void println(T x);
}
public class lambdaEx5 {
public lambdaEx5() {
MyFunction5<String> f1 = x -> {System.out.println(x.toString());};
f1.println("String Generic 사용 람다식");
f1.println("Yoon's Dev");
MyFunction5<Integer> f2 = x -> {System.out.println(x.toString());};
f2.println(Integer.valueOf(100));
}
public static void main(String[] args) {
new lambdaEx5();
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[JAVA] 문자(Text) 스트림, 버퍼(Buffer) 스트림, File 클래스 | Yoon's Dev (0) | 2021.04.26 |
---|---|
[JAVA] JAVA의 입출력, 바이트 스트림(ByteStream) | Yoon's Dev (0) | 2021.04.24 |
[JAVA] JAVA의 입출력 스트림(Stream) | Yoon's Dev (0) | 2021.04.23 |
[JAVA] JAVA의 5가지 리스너 이벤트 처리 방법 (독립, 내부, 프레임, 익명, 람다식) | Yoon's Dev (0) | 2021.04.20 |
[JAVA] JAVA의 GUI 기초, awt, swing 작성 절차, 컨테이너와 컴포넌트, 배치 관리자 | Yoon's Dev (0) | 2021.04.19 |