본문 바로가기
Study/이것이 자바다(개정판)

매개변수가 없는 람다식 예제연습 해보기

by prlkt5200 2023. 12. 8.
반응형

책에 나와있는 예제에서 최대한 기본에 가깝게 수정해서, 다시 올려봤습니다.

설명을 자세히 해봤는데, 많은 분이 람다식의 흐름을 더 잘 이해할 수 있기를 바라면서 글을 마치겠습니다.

 

 


 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package thisisjava;
 
public class Button {
 
    /*
     * 인터페이스로 람다식을 구현하는 경우 추상메소드가 1개만 있어야 합니다. 그것을 보조해주는 어노테이션이 바로 아래와 같습니다.
     */
    @FunctionalInterface
    public static interface ClickListener {
        void onClick();
        // 람다식을 통해 구현할 추상메소드 입니다.
    }
 
    private ClickListener clickListener;
    // Button 객체를 만들고, 그 안에 있는 필드를 통해 람다식과 연결해주려 합니다. 계속해서 아래를 보시면서 확인해가겠습니다.
 
    // 이 메소드의 매개변수는 ClickListener 인터페이스를 구현한 객체. 즉 다시말해서 람다식을 받아줍니다.
    // 역할은 Button 객체의 필드 clickListener와 위에서 말한 람다식을 연결해줍니다.
    public void setClickListener(ClickListener clickListener) {
        this.clickListener = clickListener;
    };
 
    // 이 Button 객체의 필드로 선언한 람다식. 그것의 onClick 메소드를 호출하는 메소드입니다.
    // 조금 이해가 어렵더라도 이 부분. 잘 이해해야 합니다.
    public void click() {
        this.clickListener.onClick();
    }
 
    // 여기서 흐름을 자세히 보셔야 합니다.
    // 계속 반복해서 흐름을 봐주세요
    public static void main(String[] args) {
 
        // Button 객체 생성
        Button btnOk = new Button();
 
        
        btnOk.setClickListener(() -> {
            System.out.println("Ok 버튼을 클릭했습니다.");
        });
        // Button 객체의 setClickListener 메소드를 호출합니다.
        
        // setClickListener 메소드의 매개변수로 ClickListener 인터페이스를 구현한 람다식을 이 코드에서 바로 정의해줍니다.
        // 즉, 여기서 람다식은 ClickListener 인터페이스를 구현한 객체(익명구현객체) 입니다.
        // 인터페이스의 추상 메소드를 @override 하였으나, 구현하려는 추상메소드가 매개변수가 없기에 람다식 또한 매개변수가 없는 형태로 구현하였습니다.
        // 형태는 실행부가 1개의 코드이면 {} 생략. 2개 이상이면 {} 필요합니다만, 기본적으로 {}를 해주는 것이 가독성이 좋다고 생각합니다.
        // 역할은 위에서 설명했듯이 Button 객체의 필드 clickListener와 함수형 인터페이스를 람다식으로 구현하면서, 바로 연결해줍니다.
 
        
        btnOk.click();
        //이 메소드의 역할 역시 위에서 설명한대로
        //Button 객체의 필드로 선언한, 람다식(익명구현객체)의 onClick 메소드를 호출하는 것이며, 그에 따라 람다식에서는 실행부를 바로 호출합니다. 
 
    }
 
}
 
cs
반응형