더 적은 비용으로 더 많은 작업 수행: Java 8 람다 표현식

람다 표현식을 사용하면 Java 코드를 더 읽기 쉽고, 더 강력하고, 더 읽기 쉽게 만들 수 있습니다.

프로그래밍 언어에 대한 비판 중 하나는 특정 처리를 수행하기 위해 작성된 명령어의 수이며 때로는 많은 코드를 작성해야 합니다. 람다 표현식은 몇 가지 경우에 대해 이 문제를 해결했으며 C#이 수년 동안 그랬던 것처럼 Java를 더 강력하고 쉽게 만듭니다.

Lambda 표현식은 Java SE 8의 새로운 기능이며 이 릴리스에 추가된 가장 주목할만한 기능입니다. 람다 식은 이러한 식을 사용하는 메서드와 인터페이스를 나타내는 보다 명확한 방법을 제공합니다. 또한 람다 표현식은 목록을 탐색하고 필터링하고 컬렉션에서 데이터를 추출하는 것을 더 쉽게 만들어 Java 객체 컬렉션을 개선합니다. 성능 기능은 모든 새로운 최신 컴퓨터에서 사용할 수 있는 멀티태스킹 환경에서 Java를 강화합니다.

프로그래머는 람다 식이 함수형 프로그래밍의 개념으로 Java의 객체 지향 특성을 오염시킬까 봐 두려워합니다. 사실, 이것들은 몇 년 전에 C # 언어에 영향을 미쳤던 것과 동일한 비판이지만 이전보다 나아졌습니다.

Lambda 및 LINQ 식과 VisualBasic.Net

Lambda 식은 주로 LINQ(통합 언어 쿼리)를 지원하기 위해 C# 및 VB.Net 에 추가되었습니다. 람다 표현식은 트리와 유사한 표현식을 만드는 데 사용할 수 있는 익명 함수입니다. C#에서는 입력 매개 변수를 지정하여 람다 식을 만들 수 있습니다. 측면  람다 연산자 =>의 왼쪽에 있는 식이나 명령 블록을 다른 쪽에 놓습니다. 예를 들어, 표현식 x=> x*x는 x라는 매개 변수를 지정하고 x의 제곱을 반환합니다. VB.Net 에서. 이 경우 익명 함수를 사용하여 람다를 만듭니다.

LINQ는 Visual Studio 2008에도 도입된 기능 집합으로, 쿼리를 만드는 기능을 추가할 수 있습니다. LINQ는 SQL 데이터베이스, XML 문서, ADO.Net 데이터 세트 및 .Net 컬렉션, 파일, 문자열 등을 쿼리하는 데 유용합니다.

LINQ 및 람다 식은 C# 커뮤니티에서 널리 사용되고 있습니다. 따라서 Java.

Java의 익명 내부 클래스

Java의 익명 내부 클래스는 람다 표현식을 향한 첫 번째 단계였습니다. 다음 예제와 같이 내부 클래스를 호출하여 사용할 수 있습니다.

JButton button = new JButton("test"); 
button.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
System.out.println("원 클릭");
}
});
내부 클래스 ActionListener  단추에 추가된 것은 actionPerformed()을 사용할 수 있습니다. 이렇게 하면 약간의 코드가 절약되지만 너무 많이 절약되지는 않습니다.

하나의 메소드만 정의하는 인터페이스를 Java 8에서는 기능적 인터페이스라고 합니다. 람다 표현식은 함수형 인터페이스 및 내부 클래스와 함께 사용되는 경우가 많습니다.

Java의 람다 표현식 구문

Java의 람다 연산자는 -> 입니다. C #과 마찬가지로 Java 8은 다음 예제와 같이 인수를 첨부합니다.

(int x) -> x * x
변수 x을 정수 유형으로 지정하고 이 변수의 제곱을 반환하려고 합니다 x.

다음 세 가지 람다 표현식을 살펴보겠습니다.

(int x, int y) -> x + y 

() -> 36

(문자열 s) -> { System.out.println (들); }
이제 ActionListener 이전 람다:

JButton button = new JButton("test"); 
testButton.addActionListener(e -> System.out.println ( "원 클릭"));
이 코드는 더 작고 읽기 쉽습니다. 또한 내부 클래스 ActionListener이 인수가 되었습니다 e.

java.util.function

java.util.function 은 Java 8에 추가되었으며 5 가지 유형의 기능 인터페이스를 포함합니다 .
  • Predicate: 매개 변수로 전달된 객체의 속성입니다.
  • Consumer: 전달된 객체를 인수로 사용하여 트리거해야 하는 액션입니다.
  • Function: 단일 결과 렌더링 Y:   X-> Y
  • Provider: X
  • 단항 연산자: of X->의 인스턴스를 포함합니다. x
  • (X, X)->의 이항 연산자 x

Lambda 표현식의 >Object 컬렉션은 Java에서 컬렉션 사용을 향상시킬 수 있습니다. 다른 버전에서는 람다 표현식과 매우 잘 결합되는 기능이 컬렉션에 추가되었습니다(예: forEach 두 인터페이스에 설정 IteratorIterable.

예:
List 학생 목록을 포함하며 이 클래스는 학생의 나이를 속성으로 가지고 있습니다.

List 및 = Student.createShortList(); 
이제 List.

Predicate list = 및 -> et.getAge() >= 20; 
마지막으로, 우리는 우리의 선택으로 뭔가를 할 수 있습니다:

aClass.doqlqthing(pl, list); 
이것은 이전 버전의 Java보다 훨씬 빠릅니다. 더 복잡한 프로세스를 수행하려면 forEach():

et.forEach( e -> e.getName() ); 
결론적으로 Java 언어에 추가된 기능은 어떤 식으로든 객체 지향 개념을 약화시키지 않습니다. 이러한 기능은 언어를 강하고 풍부하며 우아하게 만듭니다.

참조: