본문 바로가기
개발자의삶/Java

Java 의 람다(Lamda)를 활용한 스트림(Stream) 예제

by 트라네스 2022. 5. 11.
728x90
반응형

 매일같이 평범한 Java의 반복문과 함수를 선언하며 궁금했던 자바(Java)에서 사용하는 람다(Lamda)와 스트림(Stream)에 대한 문법에 대한 이해와 사용법에 알아보려고 한다. 어느 정도 코딩이나 알고리즘 문제를 풀다 보면 한 없는 조건문과 반복문만을 사용하고 있는데 람다와 스트림을 사용하면 생각보다 코드를 간결화할 수 있다. 간단하게 람다와 스트림의 사용법과 예제를 통하여 알아보도록 하자.

 

 

람다(Lamda)

 Java의 Lamda는 메소드를 하나의 식(Expression)으로 표현한 것이다. 다른 말로 표현하자면 익명 함수(Anonymous function) 생성 문법이라 할 수 있다. 단, 제약조건이 있는데 클래스(Class)의 구성 멤버로 선언되어야 한다.

 

람다의 기본식

 람다의 기본식은 아래와 같습니다. 

 

 

람다를 사용할 때의 장점

  1. 코드의 간결성
  2. 지연연산 수행
  3. 병렬 처리 가능

람다를 사용할 때의 단점

  1. 람다식의 호출에 대한 어려움
  2. Stream 사용 시 단순 반복문(for 혹은 while)의 성능이 떨어집니다.

 

람다를 사용하는 예제

 아래의 코드는 간단한 예제로 익명 함수를 사용하기 위하여 함수형 인터페이스를 선언한다. 함수형 인터페이스를 사용하기 위해서는 @FunctionalInterface 어노테이션을 사용하면 된다. 참고로 함수형 인터페이스에 선언된 추상화 메서드(abstract method)는 단 1개 만을 선언하도록 되어있기 때문에 여러 개를 선언하면 에러가 발생하니 참고한다.

//익명 함수를 사용하기 위한 인터페이스
@FunctionalInterface
interface AgeInterface {
    int nextLevel(int curLevel);
}

public class Kkul {
    public static void main(String[] args) {
        int level = 2;
        //익명 함수 선언 
        AgeInterface gettingAge = (curLevel) -> { return curLevel + 1; };
        System.out.println( String.format("kullbung's current level is %d" , level) ); 
        System.out.println( String.format("kullbung's next    level is %d" , gettingAge.nextLevel(level)) ); 
    }
}

 

람다 사용 예제 출력 결과
람다 사용 예제 출력 결과

 함수형 인터페이스에 2개 이상의 추상화 함수를 선언할 경우 다음과 같이 에러가 발생한다.

 => Invalid '@FunctionalInterface' annotation; AgeInterface is not a functional interface

 해결 방법은 함수를 1개로만 정의하고 함수형 인터페이스를 따로 선언하는 것이 좋다.

@FunctionalInterface
interface AgeInterface {
    int nextLevel(int curLevel);
	//2개 째의 함수를 선언해본다.
    int nextLevel(int curLevel, int testLevel);
}

public class Kkul {
    public static void main(String[] args) {
        int level = 2;
        //익명 함수 선언 
        AgeInterface gettingAge = (curLevel) -> { return curLevel + 1; };
        System.out.println( String.format("kullbung's current level is %d" , level) ); 
        System.out.println( String.format("kullbung's next    level is %d" , gettingAge.nextLevel(level)) ); 
    }
}

함수형 인터페이스에 2개의 함수를 선언한 경우
함수형 인터페이스에 2개의 함수를 선언한 경우

 

 오늘은 람다에 대한 예제와 함수형 인터페이스에 대한 설명을 알아보았습니다. Java 에서 제공하는 함수형 인터페이스가 있는데 그에 관해서는 다음에 다뤄보도록 할게요. 감사합니다.

728x90
반응형

댓글


TOP

TEL. 02.1234.5678 / 경기 성남시 분당구 판교역로