람다 함수에서 소비자는 무엇입니까?

글쎄, 이것은 커뮤니티에서 잘 통합된 것처럼 보일 수 있지만 이것에 대해 뭔가를 만들고 더 많이 배울 수 있도록 돕는 것이 중요하다고 생각합니다.

먼저 예제 코드를 생성합니다.

Car car1 = new Car("Porsche 911");
Car car2 = new Car("Ferrari 458");
Car car3 = new Car("Lamborghini Urus");

List<Car> cars = Arrays.asList(car1, car2, car3);

cars.forEach( (c) -> System.out.println(c.getName));


소비자 인터페이스를 설명하기 위해 forEach() 메서드를 사용하겠습니다.

Java 8 이후로 발생하는 이 반복을 구성하는 책임을 유지하는 인터페이스 함수를 수신하는 함수 람다가 있습니다. 함수 람다를 실행하려면 작업을 수행하는 인터페이스 함수가 ​​있어야 합니다.

인터페이스 함수가 ​​있는 경우 Consumer는 Java의 Function 패키지의 일부이며 함수와 함께 사용할 수 있습니다.

좀 더 명확하게 하기 위해 우리는 Consumer 클래스를 구현하는 익명 클래스를 만들 것입니다.


Consumer<Car> show = new Consumer<Car>() {
    public void accept(Car c) {
        System.out.println(c.getName);
    }
}

cars.forEach(show);


Consumer 클래스에는 일부 작업과 함께 사용되지만 아무 것도 반환하지 않는 값을 수신하는 함수를 수신하는 책임을 유지하는 Accept라는 고유한 메서드가 있습니다. 함수를 제시하는 이러한 방식은 관습적이지 않지만, 예를 들어 함수를 생성할 때 어떤 일이 발생하는지 이해하기 위해 함수 람다를 사용할 때 어떤 일이 발생하는지 소개합니다. 이제 이 코드를 리팩토링할 것입니다.


cars.forEach( (c) -> System.out.println(c.getName));



우리는 첫 번째 예에서와 같이 리팩토링에서 볼 수 있습니다. 객체 C를 초기화하는 것이 아니라 컴파일러가 우리가 Consumer를 할당하여 이 정보를 추상화한다는 것을 이해하기 때문에 발생합니다. Accept 메서드가 없는 경우 컴파일 과정에서 유추된 경우 forEach 메서드는 Consumer를 수신하고 각 반복에서 실행할 작업을 보냅니다. 그래서 우리는 Java의 스트림에 의해 기능 인터페이스가 어떻게 작동하는지 간략하게 이해합니다.

좋은 웹페이지 즐겨찾기