람다식 (Lambda Expression)
람다식 (Lambda Expression)
[ 정의 ]
- 함수형 프로그래밍 스타일 지원
- 자바의 메소드 표현과 유사하다
- 자바의 메소드를 좀 더 쉽고 간결하게 정의하기 위한 기법
[ 기본 표현(문법) ]
(자료형 매개 변수) -> { 실행 코드; }
1) 매개 변수: 메소드의 매개변수와 동일한 역할
2) -> : 화살표(Arrow), 코드블럭을 호출하는 역할
3) 실행코드: 메소드의 구현부와 동일한 역할
자바의 메소드와 자바스크립트 함수와 유사하다.
1) Java
public void test(int a) {
syso(a);
}
2) JavaScript
function test() {}
() {}
[ Java의 람다식 ]
- 자바의 람다식은 불안전 하다.
- 객체 지향이라 메소드가 독립적이지 않다.
- 메소드를 객체 취급할 수 없다.
- 인터페이스를 사용해서(도움을 받아) 정의한다.
- 자바의 람다식 코드 > 인터페이스 변수 = 람다식;
[ 자바의 익명 객체 ]
- 이름없는 클래스를 사용해서 만드는 객체
- 인터페이스를 사용한다.
- 딱 1번만 객체를 만들 필요가 있을 때 사용한다.
[ 자바의 람다식 기본 예제 ]
public static void main(String[] args) {
TestInterface t1 = () -> {
System.out.println("익명 객체가 구현한 메소드");
}
t1.test();
}
interface TestInterface {
void test();
}
- 결과 (Console)
-> 익명 객체가 필요할 때 람다식을 사용하면 간결하게 표현할 수 있다.
[ 자바의 람다식 종합 예제 ]
- 람다식 = 익명객체의 추상 메소드
a. 매개변수 O, X
b. 반환값 O, X
1) 매개변수 X, 반환값 X
public static void main(String[] args) {
NoParameterNoReturn a1 = () -> { System.out.println("a1"); };
a1.call();
}
interface NoParameterNoReturn {
void call();
}
--> output(console)
a1
2) 매개변수 O(1개), 반환값 X
public static void main(String[] args) {
// 매개변수가 1개만 있을때 람다식 표현방법 2가지
// 방법1
ParameterNoReturn a2 = (int num) -> { System.out.println(num); };
a2.call(100);
a2.call(200);
a2.call(300);
// 방법2 - 매개변수가 1개라면 좀더 간결하게 표현할 수 있다. () {} 제거
ParameterNoReturn a3 = num -> System.out.println(num);
a3.call(400);
a3.call(500);
}
interface ParameterNoReturn {
void call(int num);
}
--> output(console)
100
200
300
400
500
3) 매개변수 O(여러개), 반환값 X
public static void main(String[] args) {
// 매개변수가 여러개 있을때 람다식 표현방법 2가지
// 방법1
ParameterNoReturn2 a4 = (int a, int b) -> { System.out.println(a+ b); };
a4.call(100, 200);
// 방법2 - 매개변수가 2개 이상일 때는 자료형을 생략할 수 있고, ()는 생략할 수 없다.
ParameterNoReturn2 a5 = (a, b) -> System.out.println(a+b);
a5.call(100, 200);
}
interface ParameterNoReturn2 {
void call(int a, int b);
}
--> output(console)
300
300
4) 매개변수 X, 반환값 O
public static void main(String[] args) {
// 매개변수가 없을 때는 ()를 생략할 수 없다.
NoParameterReturn a6 = () -> { return 100; };
System.out.println(a6.call());
// 실행 블럭에 실행문이 유일하게 반환문만 존재할 때
oParameterReturn a7 = () -> 100;
System.out.println(a7.call());
}
interface NoParameterReturn {
int call();
}
--> output(console)
100
100
5) 매개변수 O, 반환값 O
public static void main(String[] args) {
// 방법1
ParameterReturn a8 = (int a, int b) -> { return a + b; };
System.out.println(a8.call(100, 200));
// 방법2 - 더 간결하게 표현
ParameterReturn a9 = (a,b) -> a+b;
System.out.println(a9.call(100, 200));
}
interface ParameterReturn {
int call(int a, int b);
}
--> output(console)
300
300
MEMO>
# 오랜만에 Java에서 인터페이스를 사용해봤는데, 불과 몇달전 수업 후 복습을 했지만... 까먹었다. 다시 공부해야겠다.
# Java에서 람다식의 목적은 익명객체가 필요로 할 때 좀 더 간결하게 표현하기 위해 쓰인다!!
# 람다식 표현법: (자료형 매개변수) -> { 실행코드 }
# 람다식을 표현할 때 매개변수, 반환값의 존재유무에 따라 머릿속에서 정리하기
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 45일차 (0) | 2022.06.19 |
---|---|
[학습일지]JAVA교육일지 44일차 (0) | 2022.06.16 |
[학습일지]JAVA교육일지 41일차 (0) | 2022.06.15 |
[학습일지]JAVA교육일지 40일차 (0) | 2022.06.15 |
[학습일지]JAVA교육일지 39일차 (0) | 2022.06.15 |