이 기사는 Java 8의 람다 표현식에 대한 간략한 분석을 제공합니다. 람다 표현식은 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.
Lambda 표현식은 Java8의 가장 인기 있는 기능입니다. 사람들은 완전한 객체 지향 명령형 프로그래밍 언어인 Java에 함수형 프로그래밍 개념을 도입했습니다.
함수형 프로그래밍의 작동 원리는 이 글의 범위를 벗어나지만, 우리가 자주 사용하는 OOP(객체 지향 프로그래밍)와는 분명히 다른 기능 중 하나를 추출하여 논의해 보겠습니다.
이 기사에서는 람다 표현식이 정확히 무엇인지, 그리고 전체 Java 생태계에 어떻게 적용되는지 알아봅니다. 또한 람다 표현식을 사용하지 않는 코드와 나중에 람다를 사용하여 리팩터링되는 샘플 코드도 관찰하고 비교해 보겠습니다.
람다 표현식은 전달하고 실행할 수 있는 코드 조각입니다. Java 프로그래머로서 우리는 코드 조각을 함수에 전달하는 데 익숙하지 않습니다. 우리의 습관은 아래와 같이 정의된 코드를 메소드 본문으로 캡슐화한 다음 객체 참조를 통해 실행하는 것입니다.
public class LambdaDemo { public void printSomething(String something) { System.out.println(something); } public static void main(String[] args) { LambdaDemo demo = new LambdaDemo(); String something = "I am learning Lambda"; demo.printSomething(something); } }
이것은 고전적인 OOP 개발 패러다임의 스타일로 메소드 구현을 숨깁니다. 방문객. 호출자가 단순히 변수를 메서드에 전달하면 메서드는 해당 변수에 대해 일부 작업을 수행하고 다른 변수 값을 반환하거나, 이 예에서와 같이 몇 가지 부작용을 생성합니다.
이제 변수 전달 대신 동작 전달을 사용하는 동등한 구현을 살펴보겠습니다. 이를 위해서는 메서드를 추상화하기보다는 동작을 정의하는 기능적 인터페이스를 만들어야 합니다. 기능적 인터페이스는 단 하나의 메소드만 있는 인터페이스입니다:
public class LambdaDemo { interface Printer { void print(String val); } public void printSomething(String something, Printer printer) { printer.print(something); } }
위 코드 구현에서 프린터 인터페이스는 모든 인쇄 작업을 담당합니다. printSomething 메소드는 더 이상 동작을 정의하지 않지만 Printer:
public static void main(String[] args) { LambdaDemo demo = new LambdaDemo(); String something = "I am using a Functional interface"; Printer printer = new Printer() { @Override public void print(String val) { System.out.println(val); } }; demo.printSomething(something, printer); }
에 의해 정의된 동작을 실행합니다. 좀 더 관찰력이 있는 독자라면 제가 여기서 새로운 작업을 수행하지 않는다는 것을 알아차렸을 것입니다. 아직 람다 표현식에 적용하지 않았기 때문에 이는 사실입니다. 간단히 Printer 인터페이스의 구체적인 구현을 생성하고 이를 printSomething 메소드에 전달합니다.
위의 예는 람다 표현식을 Java에 도입하는 핵심 목표를 달성하는 것을 목표로 합니다.
람다 표현식은 원래 기능적 인터페이스의 인라인 구현을 정의하는 데 사용되었습니다.
람다 표현식을 사용할 때 위의 예를 재구성하기 전에 먼저 알아봅시다. 필요한 구문 지식:
(param1,param2,param3...,paramN) - > {//代码块;}
람다 식은 일반적으로 메서드 선언에서 정의하는 식으로 구성되며 괄호로 묶이고 쉼표로 구분된 인수 목록과 실행될 코드를 가리키는 화살표가 옵니다. . 이제 람다를 사용하여 위 코드를 리팩토링해 보겠습니다.
public static void main(String[] args) { LambdaDemo demo = new LambdaDemo(); String something = "I am learning Lambda"; /**/ Printer printer = (String toPrint)->{System.out.println(toPrint);}; /**/ demo.printSomething(something, printer); } }
은 매우 컴팩트하고 아름다워 보입니다. 기능적 인터페이스는 하나의 메서드만 선언하기 때문에 람다의 첫 번째 부분에 전달된 매개 변수는 자동으로 메서드의 매개 변수 목록에 매핑되고 화살표 오른쪽의 코드는 메서드의 특정 구현으로 간주됩니다.
이전 예제와 마찬가지로 람다 표현식을 사용하면 더 쉽게 읽고 따라할 수 있는 더 간결한 코드를 가질 수 있습니다. 성능 및 멀티 코어 처리 측면에서 이 접근 방식에는 다른 이점이 있지만 이 문서의 범위를 벗어나는 Streams API를 이해한 후에만 적용됩니다.
람다 유무에 따른 주요 메소드를 비교해 보면 코드가 갑자기 짧아질 때 실제로 람다 표현식의 힘을 알 수 있습니다.
public static void main(String[] args) { LambdaDemo demo = new LambdaDemo(); String something = "I am learning Lambda"; /**/ Printer printer = (String toPrint)->{System.out.println(toPrint);}; /**/ demo.printSomething(something, printer); }
여기에 표시된 것보다 더 나은 코드를 만들 수도 있습니다. 더 간결합니다. 이런 일이 발생하면 화살표 왼쪽에 있는 매개변수의 유형을 지정할 필요조차 없으며 해당 유형은 인터페이스 메소드의 형식 매개변수를 기반으로 컴파일러에 의해 유추됩니다.
Printer printer = (toPrint)->{System.out.println(toPrint);};
우리는 더 잘할 수 있습니다. 람다의 또 다른 특징은 매개변수가 하나만 있을 경우 괄호를 완전히 제거할 수 있다는 것입니다. 마찬가지로 화살표 오른쪽에 명령문이 하나만 있는 경우 중괄호를 제거할 수도 있습니다.
Printer printer = toPrint -> System.out.println(toPrint);
이제 코드는 정말 귀엽게 보이지만 이제 시작에 불과합니다. 인터페이스 메소드에 매개변수가 필요하지 않으면 수명을 빈 대괄호 쌍으로 바꿀 수 있습니다.
() -> System.out.println("anything");
먼저 객체를 생성한 다음 전달하지 않고 람다를 인라인하면 어떻게 될까요? saySomething 메소드로 전달되는 경우:
public static void main(String[] args) { LambdaDemo demo = new LambdaDemo(); String something="I am Lambda"; /**/ demo.printSomething(something, toPrint -> System.out.println(toPrint)); }
이제 우리는 실제로 함수형 프로그래밍에 대해 이야기하고 있습니다. 주요 기능 본문이 9줄의 코드에서 3줄로 줄었습니다. 이러한 간결한 코드는 람다 표현식을 Java 프로그래머에게 매우 매력적으로 만듭니다.
위 내용은 Java 8의 Lambda 표현식에 대한 간략한 분석: Lambda 표현식을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!