[JAVA]함수형 프로그래밍 (2)
카테고리: JAVA
[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); }
댓글 남기기