티스토리 뷰
1. 람다 표현식
- Lambda Expression
:: 익명 함수(Anonymous Funtion)을 간결하게 표현하는 방법
:: 주로, 함수형 인터페이스 구현에 사용
// 구조
(매개변수) -> { 실행 코드 }
// 매개 변수의 타입 생략 가능
// 중괄호 생략 시, return도 생략 가능
(a, b) -> a + b
- 함수형 인터페이스
:: 단 하나의 추상 메서드만을 가진 인터페이스
:: Ex) Runnable, Comparator, Consumer - 람다 표현식 예시
더보기
1. 람다 표현식만 사용
public class Main {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("사과", "바나나", "오렌지");
// 람다 표현식을 사용한 순회
fruits.forEach(fruit -> System.out.println(fruit));
// 메서드 참조(Method Reference)를 사용한 순회
fruits.forEach(System.out::println);
}
}
실행결과
사과
바나나
오렌지
사과
바나나
오렌지
2. 람다 표현식과 함수형 인터페이스 사용
// 함수형 인터페이스 정의
@FunctionalInterface
interface Calculator {
int operate(int a, int b);
}
public class Main {
public static void main(String[] args) {
// 람다 표현식을 사용하여 함수형 인터페이스 구현
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;
System.out.println("10 + 20 = " + add.operate(10, 20)); // 30
System.out.println("10 * 20 = " + multiply.operate(10, 20)); // 200
}
}
실행결과
10 + 20 = 30
10 * 20 = 200
3. 람다 표현식과 스트림
public class Main {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("사과", "바나나", "오렌지", "망고");
fruits.stream() // 스트림으로 변환
.filter(fruit -> fruit.startsWith("사")) // "사"로 시작하는 과일만 필터링
.forEach(System.out::println); // 결과 출력
// 이때 모두 소모하고 스트림은 사라짐
}
}
실행결과
사과
1.1 익명 클래스 and 익명 구현 객체
익명 클래스 | 익명 구현 객체 |
단발성 :: 한번 사용되고 끝 | |
부모 클래스에 대한 extends | 인터페이스에 대한 implements |
1. 상속의 경우
:: 부모를 상속(extends)한 클래스 정의와 객체 생성과 동시에
:: 이때, 부모 클래스가 존재해야 함 -> 아무것도 없이 익명 클래스 불가
- 예시
더보기
// 부모 클래스
class Animal {
public String cry() {
return "(울음)";
}
}
익명 클래스
Animal chihuahua = new Animal() {
public String cry() {
return "왈왈";
}
}
2. 구현의 경우
:: 인터페이스를 구현(implements)한 객체를 생성
:: 중간에 클래스를 두지 않고, 인터페이스만을 통해서 바로 구현
=> 때문에 익명 함수 구현에 해당을 이용
=> 함수형 프로그래밍에서는 "일급함수"와 "순수함수" 성질이 중요하여 껍데기만 구현한 인터페이스가 유리
더보기
- 일급함수 :: 함수가 변수, 파라미터, 반환으로 사용 가능
- 순수함수 :: 부수효과 X, 참조 투명성 O
java는 함수가 아닌 객체 안의 행위 구현인 메서드이기 때문에 꼭 객체가 필요함
- 예시
더보기
인터페이스 정의
interface IAnimal {
public String cry();
}
익명 구현 객체
IAnimal chihuahua = new IAnimal() {
public String cry() {
return "왈왈";
}
}
- 익명 구현 객체 + 람다 적용 예시
더보기
Member[] members = {
new Member(12, "Aaron"),
new Member(11, "Baron"),
new Member(13, "Caron"),
new Member(10, "Daron"),
};
일 때, 정렬
Arrays.sort(members, 익명 함수 = 어떤걸 기준으로 나열할지) // 기준점
// 이를 통한 구현
Arrays.sort(members, new Comparator<Member>() {
@Override
public int compare(Member m1, Member m2) {
return Integer.compare(m1.getId(), m2.getId());
}
})
람다 적
Arrays.sort(members, (Member m1, Member m2) -> { return Integer.compare(m1.getId(), m2.getId()); });
Arrays.sort(members, (Member m1, Member m2) -> Integer.compare(m1.getId(), m2.getId()) );
Arrays.sort(members, Comparator.comparingInt(each -> each.getId()));
Arrays.sort(members, Comparator.comparingInt(Member::getId));
참고
ASAC 수업자료
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- acac
- acas#acas7기
- memo
- ssh
- useReducer
- ASAC
- git
- useContext
- useCallback
- useMemo
- asac7기
- useEffect
- react
- useRef
- useLayoutEffect
- asac7#asac
- useState
- asac7
- Nginx
- asac#asac7기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함