Java 8에 무엇이 추가되었습니까? 람다 표현식
7498 단어 functionaljavabeginners
Cover image by Iswanto Arif on Unsplash
이 기사를 통해 Java 8 업데이트에 추가된 기능을 설명하는 짧은 시리즈를 시작합니다. 오늘 저는 이번 릴리스의 주요 화제인 람다 식(람다라고도 함)에 초점을 맞출 것입니다.
이 시리즈는 세 부분으로 나뉩니다(링크는 각 블로그 게시물이 게시될 때마다 업데이트됩니다).
람다 표현식
Java를 배우기 시작하고 이미 명령줄 예제를 통과했다면 데스크톱 애플리케이션을 만들고 싶을 것입니다. 그리고 이것을 위해 아마도 JavaFX 라이브러리를 사용합니다(적어도 제 경우였습니다).
대부분의 JavaFX 애플리케이션에서는 사용자가 트리거할 수 있는 이벤트를 처리해야 합니다. 예를 들어 버튼을 누르면 처리해야 하는 Event 객체가 생성됩니다.
따라서 사용자가 버튼을 클릭하면 트리거될 작업을 할당해야 합니다. 이 작업을 위해 우리는 일반적으로 anonymous inner class 을 선언합니다. 여기에는 필요한 작업을 수행하는 메서드가 하나만 있습니다.
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
System.out.println("Button clicked");
}
});
위의 코드가 매우 간단하더라도 많은 작성이 필요하고 코드가 커지기 시작하면 준비도 어려워집니다. 운 좋게도 람다 식 덕분에 더 간결하게 작성할 수 있습니다.
button.setOnAction( (e) -> System.out.println("Button clicked") );
와! 짧지만 거기에 무슨 일이?
람다 식 구문은 세 부분으로 구성됩니다. 첫 번째는
(e)
익명 내부 클래스의 추상 메소드 매개변수를 포함하는(또는 포함하지 않는) 대괄호입니다. 람다는 단일 추상 메서드에서만 사용할 수 있다는 것을 기억하는 것이 정말 중요합니다.우리의 경우 ActionEvent 객체는
e
참조로 표현됩니다. 메소드에 매개변수가 없으면 대신 for Runnable 인터페이스와 같이 simple()
을 사용할 수 있습니다.Runnable r1 = () -> System.out.println("I'm in outside main thread!");
마지막으로 method는 Comperator interface method
compare
와 같이 둘 이상의 인수를 가질 수 있습니다.Comparator<User> userComperator =
(User first, User second) -> first.email().compareTo(second.email());
위의 예에서 인수 유형(사용자)을 포함하지 않을 수도 있지만 명확성을 위해 추가하는 것이 좋습니다.
다음으로 인수 뒤에 새로 도입된 오른쪽 화살표
->
연산자가 있습니다.그리고 마지막으로 구현된 메서드의 본문이 있습니다. 일반적으로 한 줄의 코드이지만 더 필요한 경우
{}
대괄호로 묶을 수 있습니다.button.setOnAction( (e) -> {
System.out.println("Button clicked");
label.setText("Clicked");
});
메서드가 값을 반환해야 하는 경우 일반 메서드에서와 같이
return
문을 사용할 수 있습니다.메소드 참조(::)
밀접하게 관련되어 있고 람다 식과 함께 소개된 또 다른 주제는 메서드 참조입니다. 간단히 말해서, new 연산자
::
를 사용하면 객체 또는 기본 유형과 마찬가지로 메서드를 참조에 할당할 수 있습니다. 이 접근 방식을 사용하면 개체에서 메서드를 추출하여 실행하지 않고 다른 위치에 전달할 수 있습니다.Object objectInstance = new Object();
IntSupplier equalsMethodOnObject = objectInstance::hashCode;
System.out.println(equalsMethodOnObject.getAsInt());
위에서 우리는 참조IntSupplier에 hashCode 메소드를 할당합니다. 그런 다음 코드에서 원하는 위치에 전달할 수 있습니다.
메서드 참조를 사용하여 정적 메서드(클래스의 인스턴스를 만들지 않고) 또는 생성자를 할당할 수도 있습니다.
참고문헌
Reference
이 문제에 관하여(Java 8에 무엇이 추가되었습니까? 람다 표현식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wkrzywiec/what-was-added-to-java-8-lambda-expressions-459j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)