반응형
목차
수정할 수 없는 컬렉션
- 대부분 빠름
- 읽기 전용
- 요소를 추가, 삭제할 수 없음
- .of( )를 이용하여 만듬
- .copyOf( )를 이용하여 만들 수 있음
람다식
- 함수형 프로그래밍
- 줄이기 (생략)
- 인터페이스를 구현한 구현클래스 (메서드 재정의) 객체 생성 사용
- 간략한 표현 방식
- 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
- 외부에서 제공된 함수에 의존
- 인터페이스가 단 하나의 추상 메소드를 가질 때, 이를 함수형 인터페이스라고 한다.
- 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙이면 된다.
- 생략 가능한 경우
- 반드시 추상메서드가 하나인 인터페이스만 가능(@Functional Interface)
- 실행문이 하나일 때 생략 가능
- 실행문이 return 하나일 때 생략 가능
- 매개변수가 하나일 때 괄호 생략 가능
- 메서드 참조, 생성자 참조 (::)
- 줄이기 (생략)
- 선택사항 이지만, 컴파일 과정에서 추상 메소드가 하나인지 검사하기 때문에 유용하다.
package ch16.sec01;
@FunctionalInterface
public interface Calculable {
void caculate(int x, int y);
}
package ch16.sec01;
public class LambdaExample {
public static void action(Calculable calculable) {
int x = 10;
int y = 4;
calculable.caculate(x, y);
}
public static void main(String[] args) {
action((x,y) -> {
int result = x+y;
System.out.println("result: "+ result);
});
action((x,y) -> {
int result = x -y;
System.out.println("result " + result);
});
}
}
- 매개변수가 없는 람다식
- 람다식은 무조건 추상 메서드 재정의
- 실행문이 두 개 이상인 경우 중괄호 필요
- 실행문이 한 개일 경우 중괄호 생략 가능
- 메서드 참조
- 람다식에서 제공되는 한 매개변수의 메소드를 호출해서 호출한 매개변수를 매개값으로 사용하는 경우
package ch16.sec05.exam01;
@FunctionalInterface
public interface Calcuable {
double calc(double x, double y);
}
package ch16.sec05.exam01;
public class Computer {
public static double staticMethod(double x, double y) {
return x + y;
}
public double instanceMethod(double x, double y) {
return x * y;
}
}
package ch16.sec05.exam01;
public class Person {
public void action(Calcuable calcuable) {
double result = calcuable.calc(10,4);
System.out.println("결과: " + result);
}
}
package ch16.sec05.exam01;
public class MethodReferenceExample {
public static void main(String[] args) {
Person person = new Person();
person.action(Computer:: staticMethod);
Computer com = new Computer();
person.action(com :: instanceMethod);
}
}
출력 결과
결과: 14.0
결과: 40.0
- 매개변수의 메서드 참조
- a 매개변수의 메소드를 호출해서 b 매개변수를 매개값으로 사용하는 경우
(a, b) -> { a.instanceMethod(b); } 클래스 :: instanceMethod - 생성자 참조
- 객체를 생성하는 것을 의미한다.
(a, b) -> ( return new 클래스(a, b); } 클래스 :: new
728x90
반응형
'Java' 카테고리의 다른 글
| 4/16 - 데이터 입출력, 네트워크 (2) | 2025.04.19 |
|---|---|
| 4/15 - 스트림, 데이터와 입출력 (1) | 2025.04.19 |
| 4/11 - 멀티 스레드, 컬렉션 자료구조 (2) | 2025.04.12 |
| 4/9 - 라이브러리와 모듈, 예외 처리, java.base 모듈 (1) (1) | 2025.04.12 |
| 4/8 - 상속, 인터페이스, 중첩 선언과 익명 객체 (0) | 2025.04.12 |