Ⅰ. 람다식(Lambda Expression)
1. 람다식
※ 람다(Lambda) : 코드를 간결하게 작성하기 위해 사용하는 일종의 표현식
- 함수형 인터페이스를 다루는 방식
- 자바에서 함수적 프로그래밍 지원 기법
- 코드의 간결화 및 병렬처리에 강함
- ' -> ' 를 사용하여 표현
※ 함수형 인터페이스의 조건 : 메소드 하나만 정의하면 됨 == 추상 메소드가 하나 있음
- 람다식을 사용하면 오직 메소드 하나만 정의해서 단독으로 사용할 수 있음
2. 람다식의 특징
- 매개변수가 하나인 경우에는 소괄호 생략 가능
- 실행문이 하나인 경우에는 몸통 중괄호 생략가능
- 반환값만 존재하는 경우에는 return과 중괄호 생략 가능
3. 람다식을 사용하는 경우
- 인스턴스보다 그저 단 하나의 기능이 필요한 상황
4. 람다식의 기본 형태
// Example
package sample;
interface Printable {
void print(String s);
}
interface Calculate {
int cal(int a, int b);
}
public class Main {
public static void main(String[] args) {
Printable p; // 그저 기능 하나를 위해 사용하는 참조 변수 선언
Calculate c;
// 참조 변수가 기능 하나만을 처리하게 코딩
p = (String s) -> {System.out.println(s);}; // 람다식
p.print("람다식을 이용해 기능만 만든 첫 번째 케이스");
// 람다식을 이용해 기능만 만든 첫 번째 케이스
// 메소드의 바디가 한 문장으로 이루어진 경우, 중괄호 생략이 가능!
p = (String s) -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 두 번째 케이스");
// 람다식을 이용해 기능만 만든 두 번째 케이스
// 메소드가 처리할 자료형도 생략 가능!
p = (s) -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 세 번째 케이스");
// 람다식을 이용해 기능만 만든 세 번째 케이스
// 매개변수가 하나인 경우에만, 소괄호도 생략 가능!
p = s -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 네 번째 케이스");
// 람다식을 이용해 기능만 만든 네 번째 케이스
// 매개변수가 2개일 경우, 사칙연산
c = (a, b) -> {
return a + b;
};
System.out.println(c.cal(3, 5)); // 8
// return이 있는 메소드 바디는 한 문장만 있을 때 return까지도 생략 가능
c = (a, b) -> a - b;
System.out.println(c.cal(8, 5)); // 3
}
}
5. 람다식의 장점
- 객체지향언어인 자바에서 함수(메소드) 기반 프로그래밍을 가능하게 해줌
- 불필요한 연산을 최소화 할 수 있음
6. 람다식의 예제
// Example1
package sample;
interface Printable {
void print(String s);
}
interface Calculate {
int cal(int a, int b);
}
interface CheckLength {
int checkLen(String s);
}
public class Main {
public static void main(String[] args) {
Printable p; // 그저 기능 하나를 위해 사용하는 참조 변수 선언
Calculate c;
CheckLength l;
// 참조 변수가 기능 하나만을 처리하게 코딩
p = (String s) -> {System.out.println(s);}; // 람다식
p.print("람다식을 이용해 기능만 만든 첫 번째 케이스");
// 람다식을 이용해 기능만 만든 첫 번째 케이스
// 메소드의 바디가 한 문장으로 이루어진 경우, 중괄호 생략이 가능!
p = (String s) -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 두 번째 케이스");
// 람다식을 이용해 기능만 만든 두 번째 케이스
// 메소드가 처리할 자료형도 생략 가능!
p = (s) -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 세 번째 케이스");
// 람다식을 이용해 기능만 만든 세 번째 케이스
// 매개변수가 하나인 경우에만, 소괄호도 생략 가능!
p = s -> System.out.println(s);
p.print("람다식을 이용해 기능만 만든 네 번째 케이스");
// 람다식을 이용해 기능만 만든 네 번째 케이스
// 매개변수가 2개일 경우, 사칙연산
c = (a, b) -> {
return a + b;
};
System.out.println(c.cal(3, 5)); // 8
// return이 있는 메소드 바디는 한 문장만 있을 때 return까지도 생략 가능
c = (a, b) -> a - b;
System.out.println(c.cal(8, 5)); // 3
// 람다식 정의
l = s -> s.length();
System.out.println(l.checkLen("Good Morning~~")); // 14
}
}
// Example2
package sample;
// 제네릭 기반의 인터페이스
interface Adder<T> {
T adding(T a);
}
// 인터페이스가 제네릭 기반이라도 특별히 신경쓸 부분은 없음
public class Main {
public static void main(String[] args) {
Adder<Integer> a;
a = (arg) -> {return arg + 1;};
}
}
'Programming Language > Java' 카테고리의 다른 글
IO (Input / Output) (입출력) 스트림 (0) | 2022.07.21 |
---|---|
람다식 - 2. 자바 API의 함수형 인터페이스 (0) | 2022.07.21 |
랜덤 클래스(Random Class)와 사용자 입력(User Input) (0) | 2022.07.20 |
컬렉션 프레임워크 - 6. Stack, Deque (0) | 2022.07.20 |
컬렉션 프레임워크 - 5. Queue (0) | 2022.07.20 |