티스토리 뷰

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
링크
«   2025/02   »
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
글 보관함