[JAVA]함수형 프로그래밍 (2)

Date:     Updated:

카테고리:

태그:

[28] 함수형 프로그래밍 (2)

28.0. 객체지향 프로그래밍 + 함수형 프로그래밍

  • 람다 계산법 사용된 식을 프로그래밍 언어에 접목
  • 람다식 => 매개변수를 가진 코드 블럭 => 익명 내부 객체

28.1. 람다식 문법

  • 익명 함수 (Anonymous Function)를 생성하기 위한 식
  • 매개 변수와 매개변수를 이용한 실행문
    (매개변수) -> {실행문;}

  • 예) add() 함수
    • 두수를 입력 받아 더하는 함수
      int add(int x, int y) {
          return x+y;
      }
      
    • 람다식으로 표현
      (int x, int y) -> {return x+y;}
      
    • 매개 변수가 하나인 경우 자료형과 괄호 생략 가능
      str -> {System.out.println(str);}     
      
    • 매개 변수가 두 개이상인 경우 괄호를 생략할 수 없음
      x,y -> {System.out.println(x+y);}       //오류
      
    • 실행문이 한 문장인 경우 중괄호 생략 가능
      str -> System.out.println(str);
      
    • 실행문이 한 문장이라도 return문(반환문)은 중괄호를 생략할 수 없음
      str -> return str.length();             //오류 
      
    • 실행문이 한 문장의 반환문인 경우엔 return과 중괄호를 모두 생략
      (x, y) -> x+y;
      str -> str.length;
      

28.2. 함수형 인터페이스

  • 람다식을 선언하기 위한 인터페이스
  • 익명 함수와 매개변수만으로 구현되므로 인터페이스는 단 하나의 메서드만을 선언해야 함.
    • 단 하나의 abstract method만을 가지는 인터페이스 (Single Abstract Method Interface)
  • @FunctionalInterface 어노테이션 (annotation)
    • 함수형 인터페이스라는 의미
    • 내부에 여러 개의 메서드를 선언하면 에러남

28.3. OOP vs Lambda (문자열 두개를 연결하여 출력하는 것 구현)

  • 객체지향 프로그래밍으로 구현하기
    • 인터페이스 선언
    • 인터페이스 구현한 클래스 만들기
    • 객체 생성하고 메서드 호출하기
  • 람다식으로 구현하기

28.4. @FunctionalInterface

  • Supplier
    • Supplier는 어떠한 인자도 받지 않고 T 타입의 객체를 리턴합니다. 람다식으로는 () -> T 로 표현합니다.
      @FunctionalInterface
      public interface Supplier<T> {
          T get();
      }
      
    • 공급자라는 이름처럼 아무 것도 받지 않고 특정 객체를 리턴합니다.
  • Consumer
    • Consumer는 인자 하나를 받고 아무것도 리턴하지 않습니다. 람다식으로는 T -> void 로 표현합니다.
      @FunctionalInterface
      public interface Consumer<T> {
          void accept(T t);
      }
      
    • 소비자라는 이름에 걸맞게 무언가(인자)를 받아서 소비만 하고 끝낸다.
  • BiConsumer
    • BiConsumer는 2개의 인자를 받고 리턴 값이 없는 함수형 인터페이스입니다.
      @FunctionalInterface
      public interface BiConsumer<T, U> {
          void accept(T t, U u);
      }
      

JAVA 카테고리 내 다른 글 보러가기

댓글 남기기