성실한 사람이 되자

성실하게 글쓰자

This is spear

JAVA_SPRING/JAVA

자바 람다 표현식_자바 버전 8(Lambda expression in Java version 8)

Imaspear 2020. 6. 24. 15:47
728x90

Lambda 표현식 같은 경우는 Java version 8 이상부터 사용이 가능합니다. 

 

자바 람다 표현식 클래스는 인터페이스에 메서드가 '하나'만 있어야 사용 가능하다는 점 꼭 유의해야 합니다.

 

자바 패키지에서 제공하는 인터페이스 중 메서드가 하나인 인터페이스들의 종류들입니다.  

 

  • java.lang.Runnable 
  • java.util.Comparator 
  • java.io.FileFilter
  • java.util.concurrent.Callabe
  • java.security.PrivilegedAction
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvoatoinHandler

 

예제


예를 들어서 보여 드리겠습니다. 

 

하나의 메소드가 존재하는 인터페이스를 호출하면 인터페이스 내에 존재하는 메소드가 안에 선언이 됩니다. 

	//클래스 내에 인터페이스 생성
	interface Calculate{
		int operation(int a, int b);
	}
    
	//기존 인터페이스 호출하면 오버라이드 되는 operation 메소드 
	private void calcultedClassic() {
		Calculate calAdd = new Calculate() {
			
			@Override
			public int operation(int a, int b) {
				// TODO Auto-generated method stub
				return a+b;
			}
		};
		System.out.println(calAdd.operation(1, 2));
	}
	

 

람다 표현식을 이용하면 인터페이스 내에 메서드를 작성할 필요 없이 사용 가능합니다. 

	//인터페이스
	interface Calculate{
		int operation(int a, int b);
	}
    
    //람다를 이용한 호출 
	private void calLambda() {
		Calculate calAdd = (a, b) -> a + b;
		System.out.println(calAdd.operation(1, 2));
	}

 

@FunctionalInterface


람다 표현식을 이용한 인터페이스 내에 또 다른 메소드를 작성할 경우 람다가 표현된 메서드에서 오류가 뜨게 됩니다. 이럴 때에는 @FunctionalInterface 어노테이션은 인터페이스 위에 선언하게 된다면 인터페이스 내에 메서드를 두 개 이상 작성할 경우 인터페이스를 중심으로 오류 메시지를 출력해줘서 컴파일 오류를 사전에 방지할 수 있습니다. 

 

	@FunctionalInterface
	interface Calculate{
		int operation(int a, int b);
	}

 

 

 

java.lang.Runnable


 

Runnable 인터페이스 또한 메서드가 하나이기 때문에 사용 가능합니다.  Runnable 인터페이스 안에 run이라는 메서드를 출력해보겠습니다. 

 

private void runn() {
		Runnable runnable = new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println(Thread.currentThread().getName());
			}
		};
		new Thread(runnable).start();
	}

 

람다 표현식을 이용할 수 있습니다. 

private void runnLanbda() {
		new Thread(() ->{System.out.println(Thread.currentThread().getName());}).start();
	}