함수형 프로그래밍
함수형 프로그래밍이란?
데이터만 가지고 있는 데이터 처리부가 외부에서 제공된
데이터 처리 함수를 통해서 데이터를 처리하는 방식이다.
이 때 상황에 따라 다른 함수를 제공함으로써 다른 값을 도출하게 할 수 있다.
이것이 함수형 프로그래밍의 특징으로 데이터 처리의 다형성이라고도 볼 수 있다.
람다식이란?
(매개변수, ...) -> {처리 내용}자바는 이런 함수형 프로그래밍을 위해 java8부터 람다식을 제공한다.
위 형태로 소괄호 안엔 매개변수, 중괄호 안에는 전달받은 매개변수를 처리하는 로직이 담기게 된다.
자바는 람다식을 익명 구현 객체로 반환한다.
예시를 들어보겠다.
new Calculable(){
@Override
public void calculate(int x, int y){
처리 내용
}
}원래라면 이렇게 표현 해야했을 코드를 람다식을 이용하면 이렇게 표현할 수 있다.
(x,y) -> {처리내용}그렇기에 인터페이스 익명 구현 객체를 람다식으로 표현하려면
인터페이스가 단 하나의 추상 메소드만 가져야한다.
마지막으로 인터페이스가 함수형 인터페이스임을 보장하기 위해서는
@FunctionalInterface를 붙이면 된다
//함수형 인터페이스 선언
@FunctionalInterface
public interface Calculable{
void calculate(int x, int y);
}public Class LambdaEx{
public static action(Calculable calculable){
int x = 10;
int y = 4;
calculable.calculate(x,y);
}
public static void main(String[] args){
action((x, y)->{
int result = x + y;
System.out.println(result);
})
action((x, y) -> {
int result = x - y;
System.out.println(result);
})
}
}//출력
//14
//6실행문이 없는 람다식
만약 함수형 인터페이스의 추상 메소드에 매개변수가 없을 경우 람다식은 다음과 같이 작성할 수 있다.
실행문이 하나일 경우에는 중괄호를 생략할 수 있다.
()->{
실행문;
실행문
}
//------------------------
()->실행문리턴값이 있는 람다식
만약 함수형 인터페이스위 추상 메소드에 리턴값이 있을 경우 람다식은 다음과 같이 작성할 수 있다.
return문이 하나만 있을 경우에는 중괄호와 함께 return 키워드를 생략할 수 있다.
(매개변수, ...) -> {
실행문;
return 값
}
//-----------------------
(매개변수, ...) -> 값메소드 참조
람다식에서 불필요한 매개변수를 제거하는 것을 목적으로 한다.
말만 보면 어려우니 예시로 보여주겠다.
(left, right) -> Math.max(left, right);원래 라면 이렇게 작성해야할 코드를 메소드 참조를 사용해서 줄여보면 이렇다.
Math :: max;형식은 아래와 같다
//만약 참조 하려는 메소드가 정적 메소드라면
클래스명::메서드명
//인스턴스 메서드라면
참조변수 :: 메서드