=== 람다 (표현)식 (Lambda Expression) ===
- 함수형 인터페이스 "구현"에 사용 (자바 8부터 도입)
- 함수를 하나의 식으로 간결하게 표현
- 익명 클래스를 대체하여 코드의 가독성 향상
===함수형 인터페이스===
- 단 하나의 추상 메서드만을 가지는 인터페이스
- @FunctionalInterface 어노테이션
- 디폴트 메서드, 정적 메서드는 포함 가능
@FunctionalInterface
interface MyFunctionalInterface{
void doSomething();
}
단 하나의 추상 메서드만을 가지기 때문에 다음과 같이 코딩하면 오류가 나게 된다.
@FunctionalInterface
interface MyFunctionalInterface{
void doSomething();
void anotherDoSomething();
}
===람다식 기본형태===
메서드의 기본 형태
[접근제어자] 반환타입 메서드명(매개변수) {
구현부
};
람다식
(params) -> { 구현부(실행문) };
1) 매개변수 (params) : 함수형 인터페이스에서 메서드와 동일한! 매개변수 사용
2) 화살표 (->) : 매개변수와 구현부(실행문, 바디)를 구분한다.
3) 바디 : 메서드의 구현부({}, 코드블록)
===람다식 사용 예제===
1) 기본 표현: 여러 개의 매개변수, 하나의 실행문(중괄호 생략 가능)
@FunctionalInterface
interface Calculator {
int add(int a, int b);
}
람다식의 경우 구현부가 한 줄 일때 중괄호({}, 코드블록) 생략 가능 >> return 키워드까지 생략(값은 곧바로 반환)
Calculator calculator2 = (a, b) -> a + b;
System.out.println("람다식 결과: " + calculator2.add(5, 7));
단, 여러줄의 구현이 필요한 경우 {}가 생략이 불가능하다. 반환값이 있는 경우 반드시 return 키워드를 사용한다.
Calculator calculator3 = (a, b) -> {
int result = a + b;
return result;
};
System.out.println("람다식 결과2: " + calculator3.add(7, 9));
2) 매개변수가 없는 경우 : 괄호 생략 불가
@FunctionalInterface
interface NoParams {
void sayHello();
}
NoParams noParams = () -> System.out.println("매개변수가 없습니다.");
noParams.sayHello();
3) 매개변수가 한 개인 경우(소괄호 생략 가능)
@FunctionalInterface
interface OneParams {
void print(String message);
}
OneParams oneParams = message -> System.out.println("출력: " + message);
oneParams.print("안녕"); // 출력: 안녕
4) 실행문이 여러 줄인 경우
@FunctionalInterface
interface Operation {
void operate(int a, int b);
}
Operation operation = (a, b) -> {
System.out.println("합: " + (a + b));
System.out.println("차: " + (a - b));
}; // 인터페이스로 클래스 선언과 동시에 인스턴스화
operation.operate(10, 20);
5) 반환값이 있는 경우
@FunctionalInterface
interface StringLength {
int getLength(String str);
}
실행문이 한줄일 때 - return 생략이 가능하다
StringLength stringLength = str -> str.length();
System.out.println("문자열의 길이: " + stringLength.getLength("Lambda"));
실행문이 여러 줄일 때 - return 생략이 불가능하다.
StringLength stringLength = str -> {
System.out.println("입력된 문자열: " + str);
return str.length();
};
<반복문으로 여러줄 실행하기>
일반적인 향상된 for 문을 사용하여 numbers 리스트 값을 하나씩 출력하는 방식이다.
for (Integer num: numbers) {
System.out.println(num);
}
>>람다식을 사용한 forEach Method (for 문을 대체할 수 있다.
numbers.forEach(num -> System.out.println(num));
'웹개발 > JAVA' 카테고리의 다른 글
| final (0) | 2025.03.09 |
|---|---|
| 캡슐화(Encapsulation// getter&setter) (1) | 2025.03.08 |
| 내부 클래스(Inner Class, Nested Class) (1) | 2025.03.06 |
| 결합도(Coupling)와 응집도(Cohesion) (0) | 2025.03.05 |
| SOLID 원칙 (0) | 2025.03.04 |