[Java] 람다표현식

Hyo Kyun Lee·2022년 2월 4일
0

Java

목록 보기
48/61
post-custom-banner

1. 람다표현식

기존 하나의 메소드를 실행하기 위해 인자에 객체를 생성하고 내부적으로 메소드를 선언하던 복잡한 구조를, 임의의 1회용 객체를 생성하고 메소드 부분만 전달할 수 있는 간결한 구조로 변환한 구문을 일컫는다.

2. 구현 방법

public class lambdaTest{
	public static void main(String[] args){
    	new Thread(new Runnable(){
        	@Override
            public void run(){
				System.out.println("Running");
            }
        }).start(); //thread 동작 및 내부 스레드의 run 메소드 실행
    }
}

위와 같이 기존 방법을 통해서 run 메소드를 실행하기 위해선, 내부적으로 객체를 전달하면서 run 메소드를 선언해야하는 번거로움이 있었다.

public class lambdaTest{
	public static void main(String[] args){
		new Thread(()->{
        	public void run(){
            System.out.println("Running");
         }
        }).start();
    }
}

**lambda 표현식을 이용하면(()->{}), 별도의 객체를 생성해주지 않고도 바로 메소드인자를 전달하면서 해당 메소드를 실행시킬 수 있다.

3. 문법

람다식은 위와 같이 ()->{}의 형태를 지니고 있으며, 구체적인 구조는 아래와 같다.

  • ( 매개변수 ) -> { 실행문장 }
public interface Compare{
	public int CompareTo(int value1, int value2);
}

위와 같이 인터페이스가 정의되어있다고 가정하자.
이때 인터페이스의 메소드를 정의하고 main 클래스에서 해당 메소드를 사용하기 위해선 기존의 복잡한 정의과정이 필요할 것이다.

하지만 아래와 같이, 람다 표현식을 활용해서 매우 간단하게 표현할 수 있게 된다.

public class Test{
	public class exec(Compare compare){
    	int k = 20;
        int m = 10;
        int value = compare.CompareTo(k, m);
    }
    
	public void main(String[] args){
    	exec( (i,j) ->{ 
        	return i-j
        });
    }
}
  • 위에서 main class에서 두개의 인자를 받아 exec매소드를 찾게 된다.
  • exec메소드를 찾은 후 두개의 변수를 전달할 인터페이스를 찾는다.
  • 이때 exec에 람다표현식을 통해 객체 자체의 형태로 전달한다는 점을 기억한다.
  • 람다표현식을 통해 문법오류없이 인자전달이 가능하며, 내부적으로 객체를 지정해주면서 return을 통해 해당 인터페이스의 메소드를 구체화한 효과를 볼 수 있다(인자와 해당 메소드를 전달하는 것과 동일한 구조).
post-custom-banner

0개의 댓글