Dev/Java

Functional Programming In Java (ft. Lambda , StreamAPI)

아콩2 2023. 6. 18. 14:26
반응형

지난 글에서는 함수형 프로그래밍 기본 개념을 정리하였고
이번 포스팅에서는 자바에서 함수형 프로그래밍을 어떻게 사용하고 있는지에 대해 알아보려고 합니다.

Java8 버전부터 함수형 프로그래밍을 지원하기 위해 람다와 스트림이 도입되었습니다.

람다와 스트림을 사용하면 함수형 프로그래밍 스타일로 자바 코드를 작성할 수 있습니다.

물론 람다와 스트림을 사용하여 작성한 코드를 일반 스타일의 자바코드로 바꾸어 작성하는 것이 불가능하진 않습니다.

달리 말하면 람다와 스트림 없이도 자바 코드를 작성하는데 어려움이 없다는 뜻입니다.

하지만 그럼에도 불구하고 람다와 스트림을 사용하는 이유는 작성하는 코드의 양이 줄어들고 읽기 쉬운 코드를 만드는데 유리하기 때문입니다.

예전에 Stream 관련된 포스팅을 했었기 때문에 람다에 대한 내용만 언급하고 넘어가도록 하겠습니다

람다(Lambda)

람다는 익명 함수 (Anonymous function)을 의미합니다.

interface Calculator {
    int plus10(int a);
}

한 개의 정수를 입력으로 받아 10을 더해준 뒤에 결과값을 리턴하는 plus10 함수를 정의한 인터페이스입니다.

public class Sample {
    public static void main(String[] args) {
          Calculator cal = new Calculator() {
                  @Override 
                  public int plus10(int number) {
                       return number + 10 ;
                  }
        };
    }
}

위의 코드는 익명 내부 클래스를 이용하여 Calculator 인터페이스를 구현한 코드입니다.

public class Sample {
    public static void main(String[] args) {
        Calculator cal = (int number) ->  number +10 ;
    }
}

위의 코드는 람다를 이용하여 Calculator 인터페이스를 구현한 코드입니다. 람다를 사용한 코드가 훨씬 간단하죠?

괄호 사이의 number는 Calculator 인터페이스의 plus10 함수의 파라미터에 해당하고 -> 뒤의 number +10은 리턴값에 해당합니다.

(int number) -> number + 10 대신 (number) -> number + 10 으로 코드 작성이 가능합니다.


public class Sample {
    public static void main(String[] args) {
        Calculator cal = (int number) -> {
                System.out.println("입력 받은 값 : " + number);
                return number + 10;

        } ;
    }
}

또한 코드가 두 줄 이상인 경우 중괄호 {} 로 코드를 묶어서 작성하면 됩니다.

인터페이스 사용시 주의사항

여기서 주의해야 할 점은 Calculator 인터페이스의 메서드가 1개 이상이 된다면 람다함수를 사용할 수 없습니다.

 interface Calculator {
    int plus10(int a);
    int minus10(int a);  // minus10 메서드를 추가하면 컴파일 에러가 발생한다.
}

그래서 람다 함수로 사용할 인터페이스는 @FunctionalInterface 어노테이션을 사용하는 것이 좋습니다.
@FunctionalInterface 어노테이션을 사용하면 2개 이상의 메서드를 가진 인터페이스를 작성하는 것이 불가능해지기 때문입니다!

반응형