Back-end/Java Language

람다식(Lamda expression)

prden 2021. 7. 19. 18:09

1. 람다식이란?

자바는 람다식의 도입으로 인해 객체지향언어인 동시에 함수형 언어가 되었다. 람다식의 장점은 과거 메서드보다 간결하며 이해하기 쉽다는 것이다. 모든 메서드는 클래스에 포함되어야 해서 클래스를 새로 만들어야 했고 객체를 생성해야 메서드를 호출할 수 있었지만, 람다식은 람다식 자체로 이 모든과정을 해결할 수 있다. 

 

람다식은 아래와 같이 표현된다. 

반환타입 메서드이름(매개변수 선언){
		문장들}
        
(매개변수 선언) -> {	문장들 	}

//ex1)

int max(int a, int b){
	return a>b? a:b;
    }
    
//람다식으로 변환하면
(int a, int b) ->{ return a>b? a:b;}
(int a, int b) -> a>b? a : b
(a,b) -> a>b? a:b


//ex2)

int sumArr(int[] arr){
	int sum =0;
    for(int i: arr)
    	sum +=i;
    return sum;
    }
    
//람다식으로 변환하면 
(int[]arr) -> {
	int sum =0;
    for(int i: arr)
    	sum +=i;
    return sum;
    }

 

2. 함수형 인터페이스

람다식은 엄밀히 메서드와 동등한 것이 아닌 익명클래스의 객체와 동일한 것이다. 

람다식을 호출하는 방법

타입 f = (int a, intb) -> a>b ? a: b;

//참조변수의 타입은 클래스 또는 인터페이스가 가능하다. 
//예를 들어 max()라는 메서드가 정의된 MyFunction인터페이스가 정의되어있을 때

@Functionalinterface
interface MyFunction{
	public abstract int max(int a, int b);
    }

//인터페이스를 구현한 익명클래스의 객체는

MyFunction f = new MyFunction(){
			public int max(int a, int b){
            	return a>b? a: b;
                }
          };

int big = f.max(5,3)//익명 객체의 메서드 호출

//익명 객체를 람다식으로 대체

MyFunction f = (int a, int b) -> a>b? a: b; //익명 객체를 람다식으로 대체
int big = f.max(5,3);

 

 

'Back-end > Java Language' 카테고리의 다른 글

@SuppressWarnings  (0) 2021.09.08
ENUM  (0) 2021.07.30
Scanner  (0) 2021.07.05
0. StringBuilder vs. StringBuffer  (0) 2021.07.04
0. BufferedReader, BufferedWriter, Scanner, StirngTockenizer  (0) 2021.07.03