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

2694 단어 JavaJava

Section 1. 함수형 프로그래밍

1. 객제 지향 프로그래밍

기능을 수행하기 위해 객체를 만들고 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현




2. 함수형 프로그래밍

매개변수만을 사용하는 순수함수(pure function)를 구현하고 호출함으로써 외부에 부수적인 영향(side effect)을 주지 않도록 하는 방식

  • 자바 8부터 함수형 프로그래밍 방식을 지원하고 이를 람다식이라 함
  • 외부 자료를 사용하지 않아 여려 자료가 동시에 수행되는 병렬처리가 가능



Section 2. 람다식

1. 람다식

함수형 인터페이스를 구현하여 익명 객체(클래스)를 생성하기 위한 간단한 표현식




2. 람다식 문법

  • 매개 변수와 매개변수를 이용한 실행문 (매개변수) -> {실행문;}

  • 두 수를 입력 받아 더한 결과값을 반환하는 함수


int add(int x, int y){

    return x+y;
}
  • 람다식으로 표현
(int x, int y) -> {return x+y;}		# 기본

(x,y) -> {return x+y;}			# 자료형 생략 가능
str -> {return str.length();}		# 매개변수가 하나일 때 소괄호 생략가능
(x,y) -> x+y;				# 실행문이 한 문장의 반환문이면 중괄호와 return 생략 가능

x, y -> {System.out.println(x+y);}  	# 에러 (매개변수 2개면 소괄호 생략 불가능)
str-> return str.length();  		# 에러 (중괄호와 return이 동시에 생략되어야 함)




3. 함수형 인터페이스

람다식을 선언하기 위한 인터페이스

  • @FunctionalInterface 애노테이션 지정
  • 인터페이스는 단 하나의 메서드만을 선언해야함
  • 한 개 이상의 메서드를 선언하면 인터페이스의 자료형 레퍼런스 변수에 담기 때문에 어떤 메서드를 의미하는 지 모르고 매개변수 또한 생략 가능하기 때문에 모호한 상황이 발생




4. 표준 API 함수적 인터페이스

  • Java 에서 제공하는 표준 함수적 인터페이스 존재

    ① Consumer - 매개변수는 있고 리턴값은 없음
    ② Supplier - 매개변수는 없고 리턴값이 있음
    ③ Function: 매개변수, 리턴값 모두 있음 (매개변수를 리턴값으로 변환)
    ④ Operator: 매개변수, 리턴값 모두 있음 (매개변수들 간 연산)
    ⑤ Predicate: 매개변수는 있고 리턴 타입은 boolean




5. 람다식을 이용한 함수형 프로그래밍

  • 함수형 인터페이스 정의
@FunctionalInterface
public interface MyNumber {
	
    int getMax(int num1, int num2);
    
}
	
  • 람다식으로 익명 함수 객체 생성
public class TestMyNumber {

	public static void main(String[] args) {
    
		MyNumber max = (x, y)->(x>= y)? x:y;	# 람다식을 인터페이스 자료형 레퍼런스 변수에 저장
		System.out.println(max.getMax(10, 20));	# 인터페이스 자료형 변수로 함수 호출
			
	}
}

좋은 웹페이지 즐겨찾기