1. 객제 지향 프로그래밍
기능을 수행하기 위해 객체를 만들고 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현
2. 함수형 프로그래밍
매개변수만을 사용하는 순수함수(pure function)를 구현하고 호출함으로써 외부에 부수적인 영향(side effect)을 주지 않도록 하는 방식
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. 함수형 인터페이스
람다식을 선언하기 위한 인터페이스
4. 표준 API 함수적 인터페이스
① 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)); # 인터페이스 자료형 변수로 함수 호출
}
}