본문 바로가기
백엔드/Java

<FAST CAMPUS>자바 웹개발-객체지향 프로그래밍

by 고구마는호박고구마 2021. 1. 24.

<객체지향프로그래밍 58장~62장>

 

람다식 ( 함수형 프로그래밍 ) 

 

        람다식이란?  - 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행

                          - 함수형 인터페이스를 선언함

          

        함수형 프로그래밍이란? - 순수 함수를 구현하고 호출한다.

                                        - 매개 변수만을 사용하도록 만든 함수 

        입력 받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 안정적이고 확장성

        있는 프로그래밍 방식.

 

 

 

 

   람다식 실행 예 ) 

함수형 인터페이스에서는 함수가 하나여만 된다. ! 그 이유는 어느 매서드가 호출이 될지 알수가 없다. (getMaxNumber만 선언)
람다식은 인터페이스의 함수의 구현부를 마치 변수처럼 선언을 한다.  함수의 이름을 선언을 안하고 (익명함수) 구현을 해서 max에 저장을 하면 큰 값이 출력 되는 걸 확인 할 수있다.

 

함수가 마치 변수의 형태처럼 매개변수로 넘어간다.

 

함수의 구현부가 변수처럼 반환도 가능. 

 

 

 

스트림 

       - 자료의 대상과 관계없이 동일한 연산을 수행할 수 있는 기능 (자료의 추상화)

       - 배열, 컬렉션에 동일한 연산이 수행되어 일관성 있는 처리가 가능

       - 한번 생성하고 사용한 스트림은 재사용할 수 없다. 

       - 스트림 연산은 기존 자료를 변경하지 않는다.

       - 중간 연산 ( 자료를 필터링, 자료를 얻어오기 등)과 최종 연산(중간 연산의 합 등 결과물)으로 구분 된다. 

       - 최종 연산이 수행되어야 모든 연산이 전용되는 지연 연산. 

 

연산의 구현부는 람다식으로 사용.

 

 

 

배열을 이용한 스트림 연산

 

컬렉션을 이용한 스트림 연산 

배열에서는 스트림 안에다가 배열의 종류를 넣었고 컬렉션 에서는 스트림 메서드를 선언할 수 있다.

 

스트림은 재사용이 안되므로 정렬을해서 리스트를 출력하려면 스트림을 다시 생성해주고 -> 중간과정 정렬 메서드 -> 최종연산 으로 forEach 메서드로 각각 출력을 합니다.

 

   reduce() 연산 

    정의된 연산이 아닌 ( sorted(), map() 등 ) 프로그래머가 직접 지정하는 연산을 적용

    최종 연산으로 스트림의 요소를 소모하며 연산 수행

    ex ) 배열의 모든 요소의 합을 구하는 reduce() 연산 

 

sum() 을 reduce() 로 재정의

 

람다식을 이용한 reduce()

 

        람다식을 이용한 reduce()의 다른 방법은

클래스를 선언하여 BinaryOperator 인터페이스를 구현하고 apply함수를 가지고 람다식을 reduce에 적용할 수가 있다.

 

 

댓글