1. 람다식의 사용
1-1. 고려할 점
- Java는 객체지향 언어이다.
- 이로 인해 람다식 사용 시 인터페이스가 개입한다.
1-2. 익명 이너 클래스의 내부 구현 메서드의 약식 표현
- 람다식을 사용해서 익명 이너 클래스를 구현하는 방법이다.
- 약식 표현 = 람다식을 사용한 익명 이너 클래스 구현
- 예를 들어, Runnable, Callable, Comparable, Comparator 등의 하나의 추상 메서드를 가지는 경우 효과적이다.
1-3. 메서드 참조
1-3-1. 정의
- 이미 구현되어 있는 인스턴스 메서드를 참조하는 방법
객체 선언;
인터페이스 객체 = 객체참조변수::인스턴스 변수명;
- 반드시 객체를 먼저 생성해야 인스턴스 변수를 사용할 수 있다.
1-4. 배열 생성자 참조
1-4-1. 정의
- 배열 생성자를 메서드 참조와 유사하게 사용하는 방법이다.
1-4-2. 사용 방법
배열타입[]::new
len -> new int[len] ====> int[]::new
1-5. 클래스 생성 참고
1-5-1. 정의
- 클래스 생성을 메서드 참조와 유사한 방식으로 하는 방법이다.
1-5-2. 사용 방법
클래스명::new
@FunctionalInterface
interface RefDefaultConstructor {
Cls getInstance();
}
class Cls {
Cls() { ... }
}
RefDefaultConstructor r1 = () -> new Cls;
RefDefaultConstructor r2 = Cls::new;
2. 표준 API의 함수적 인터페이스
2-1. 인터페이스
2-1-1. 정의
- 사용 방법에 대한 명세이다.
- 개발 시 많이 쓰일 수 있는 것을 미리 정의한 것이다.
- 추상메서드로 구현되어 있으며, 원하는대로 구현해서 사용한다.
2-1-2. 인터페이스의 구성
- @FunctionalInterface 어노테이션
- 추상메서드가 존재하는 인터페이스
참고) 구현 시 람다 표기식을 사용해서 정의할 수 있다.
2-1-3. API 사용 시 람다 함수식의 장점
- 코드를 간결하게 관리할 수 있다.
- 순수 함수식을 사용하기 때문에 예상치 못한 사이드 이펙트가 없다.
2-2. java.util.function
2-2-1. 정의
- 함수형 인터페이스를 제공하는 인터페이스 집합이다.
- Java 8에서 Stream API와 람다식이 도입되면서 해당 기능을 지원하기 위해 도입되었다.
2-2-2. 대표적인 인터페이스
2-2-2-1. Consumer
- void accept(T t);
- 매개변수는 있지만 리턴은 없다.
- 매개변수를 '소비'하는 인터페이스이다.
2-2-2-2. Supplier
- T get();
- 매개변수는 없지만 리턴값은 있다.
2-2-2-3. Function
- R apply(T t);
- 매개변수도 있고 리턴값도 있다.
- 주로 매개값을 리턴값으로 매핑한다(타입 변환한다).
2-2-2-4. ~Operator
- applyAs~;
- 매개변수도 있고 리턴값도 있다.
- 주로 매개값을 연산하고 결과를 반환한다.
2-2-2-5. Predicate
- boolean test(T t)
- 매개변수도 있고 boolean을 반환한다.
- 매개값을 조사해서 true/false를 반환한다.
3. 클래스 선언 vs 람다 함수식
- 클래스 선언 시 클래스 정의, 객체 생성, 메서드 사용 등 다양한 작업이 필요하다.
- 람다 함수식 사용 시 클래스 정의, 객체 생성을 하지 않고도 메서드를 호출할 수 있다.
- 람다 함수식을 사용할 경우, 클래스 선언을 사용하는 경우보다 코드를 간결하게 유지할 수 있다.
4. stream
4-1. 정의
- Java 8에 추가된 컬렉션 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 하는 반복자
- 람다식, 메서드 참조를 가능하게 함
4-2. 사용법
- 메서드를 .로 연결 -> stream 없이 리스트 요소 등을 반복처리 가능
4-3. 기존 방법과의 차이점
- 기존에는 반복문 등으로 직접 접근
- stream으로 변환 후 접근할 수 있도록 개선
- 최종적으로 stream으로 변환하지도 않고 접근할 수 있게 됨
4-4 장점
- 병렬처리에서의 용이성
- 대용량 처리에서 효율성 확보
4-5. 사용 예시
안녕하세요! 캠프 2기에 지원하게되었는데 블로그를 보게되어서 질문 드립니다..! 처음 3개월 교육을 대학교 수업과 병행하며 할 수 있을까요? 이틀은 학교에 가야되는 상황인데 9시부터 6시 강의라서 강의를 듣기만 하면되는지, 복습을 얼마나 해야하는지, 얼마나 시간을 쏟아야하는지 가늠이 안가서 여쭤봅니다..!