JAVA - 람다 2 (2022-08-19)

2022. 8. 19. 14:063층 1구역 - 개발의 장/JAVA

1. 서론

람다에 대해 조금 더 파고들어 보자.

 

2. 본론

람다식을 요 며칠간 계속 쓰던 인터페이스를 상속받아 오버라이딩 그러니까 재정의 하는 예제이다.

 

package lambdas;

interface LambdaInterEx2 {
	public void lam();
}


public class LambdaEx2 {
	public static void main(String[] args) {
		LambdaInterEx2 lam = new LambdaInterEx2() {
			
			@Override
			public void lam() {
				System.out.println("이벤트에 맞게 코드가 구성됨.");
				
			} //오버라이드는 중괄호에 있는 것만 변경가능 허다.
		};
		lam.lam(); //<< 오버라이드는 메서드가 구현이 된 것이고, 
				   //lam변수를 통해 메서드를 호출해야함.
	}
}
package events;

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class EventEx1 extends Application{
	public static void main(String[] args) {
		launch(args);
	}

	@Override
	//lambdaEx2번의 예제
	public void start(Stage primaryStage) throws Exception {
		Label label = new Label("클릭");
		label.setFont(new Font(24));
		label.setLayoutX(120);
		label.setLayoutY(80);
		label.setOnMouseEntered(new EventHandler<Event>() {
			
			@Override
			public void handle(Event event) {
				label.setScaleX(2);
				label.setScaleY(2);
				
			}
		});
		

		
		
		AnchorPane anchor = new AnchorPane();
		anchor.getChildren().add(label);
		
		primaryStage.setTitle("Event Test");
		primaryStage.setScene(new Scene(anchor, 300, 200));
		primaryStage.show();
	}

}

 

위 코드에서 쓴 이것

		label.setOnMouseEntered(new EventHandler<Event>() {
			
			@Override
			public void handle(Event event) {
				label.setScaleX(2);
				label.setScaleY(2);
				
			}
		});

이것을 어떻게 간단하게 쓸 순 없나?

람다를 통해 줄여보도록 하자.

event -> {label.setScaleX(2);
		label.setScaleY(2);}

람다식은 보통 쓰던 코드에서 쓰면 중복이 되어 지저분해지지만

이벤트에서 사용하게되면 코드가 매우 간결해지기 때문에 이벤트에 최적화 되어 있다.