본문 바로가기

JAVA

람다식이란?

반응형

 

람다식은 익명함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수지향 언어에 가깝다. 객체 지향 프로그래밍에 익숙한 개발자는 다소 혼란서러울 수 있찌만, 자바에서 람다식을 수용한 이유는 코드가 매우 간결해지고 컬렉션의 요소를 필터링 하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있기 때문이다. 람다식의 형태는 매게 변수를 가진 코드 블록이지만 런타임 시에는 익명 구현 객체를 생성한다.

 

 

람다식 -> 매게 변수를 가진 코드 블록 -> 익명 구현 객체

 

 

 

예를 들어 Runbable 인터페이스의 익명 구현 객체를 생성하는 전형적인 코드는 다음과 같다.

 

 

 

 

Runnable runnable = new Runnable(){
	public void run(){..}
}

 

 

위코드를 람다식으로 표현하면 아래와 같다

 

 

Runnable runable = ()->{..}; (매게변수)->{실행코드}

 

 

예를 들어 int매게 변수 a의 값을 콘솔에 출력하기 위해 다음과 같이 람다식을 작성할 수 있다.

 

 

(int a) -> {System.out.println(a);}
람다식은 매게변수의 타입을 일번적으로 언급하지 않는다 그래서 위에 코드는 다음과 같이 작성이 가능하다
(a) -> {System.out.println(a);}
하나의 매게 변수만 있다면 괄호()를 생략할 수 있고,하나의 실행문만 있따면 중괄호 {}도 생략이 가능하다
a -> System.out.println(a)

 

 

매게 변수와 리턴값이 없는 람다식

다음과 같이 매게 변수와 리턴값이 없는 추상 메소드를 가진 함수적 인터페이스가 있다고 가장 해보자

method()는 라담식의 {..} 중괄호를 실행시킨다.

 

 

 

public class MyFunctionalInterfaceExample{
	public static void main(String[]args){
    	MyFunctionalInterface fi;
        
        fi = () -> {
        
        	String str = "method call1";
            System.out.println(str);
        };
        fi.method();
    	
        fi = () -> {System.out.println("method call2");};
        fi.methid();
        
        fi = () -> System.out.println("method call3");
		fi.method();
        
        
    	}
    }

 

 

 

이 인터페이스를 타켓 타입으로 갖는 람다식은 다음과 같은 형태로 작성해야한다. 람다식에서 매게 변수가 없는 이유는 method()가 메게 변수를 가지지 않기 때문이다.

 

 

매게변수가 있는 람다식

 

다음과 같이 매게 변수가 있고 리턴값이 없는 추상 메소드를 가진 함수적 인터페이스가 있다고 보자.

 

 

public interface MyFunctionalInterface{

	public void method(int x);


}





public class MyFunctionalInterfaceExample{
	public static void main(String[]args){
    	MyFunctionalInterface fi;
        
        fi = (x) -> {
        
        int result = x * 5;
        System.out.println(result)
        
        };
        
        fi.method(2);
        
        fi = (x) -> {System.out.println(x*5);};
        fi.method(2);
        
        fi = (x) -> System.out.println(x * 5);
        fi.method(2);
         
       }
    }
    
     값은 10
     
     

 

 

 

람다식의 매게변수가 하나인 이유는 현재 method()가 매게변수를 하나만 가지기 때문이다.

람다식이 대입된 인터페이스 참조 변수는 다음과 같이 method() 를 호출할수 있다. 매개값으로 5를 주면 람다식의 x변수에 5가 대입되고 x 는 중괄호{}에서 사용된다.

 

 

다음시간에 리턴값과 클래스 멤버 사용에 대해서 공부해야겠다..

 

반응형

'JAVA' 카테고리의 다른 글

람다식(3)  (0) 2020.11.01
람다식(2)  (0) 2020.11.01
DAO, DTO, VO  (0) 2020.11.01
JAVA(데이터타입)  (0) 2020.10.31
JAVA??  (0) 2020.10.31