인프런 커뮤니티 질문&답변

권정익님의 프로필 이미지
권정익

작성한 질문수

김영한의 실전 자바 - 중급 1편

섹션 8. 람다

해결된 질문

작성

·

161

0

print(() -> {

int random = new Random().nextInt(6) + 1;

System.out.println("random = " + random);

});

는 함수를 인수로 전달한다고 하셨는데, 지금 print를 보면

print(Piece piece)로 되어있습니다. 인수로 받을 수 있는 거는 Piece클래스인데 어떻게 인수만 넘긴 것으로 piece.value();가 작동이 되는지 의문이 들어서 질문 남깁니다!

public class Ex1AnswerMain5 {

    public static void main(String[] args) {
        
        print(() -> {
            int random = new Random().nextInt(6) + 1;
            System.out.println("random = " + random);
        });

        print(() -> {
            for (int i = 0; i < 3; i++) {
                System.out.println("i = " + i);
            }
        });
    }
    private static void print(Piece piece) {
        System.out.println("프로그램 시작");
        piece.value();
        System.out.println("프로그램 종료");
    }

답변 2

1

안녕하세요. 권정익님, 공식 서포터즈 David입니다.

해당 코드가 강의 내용과 일치하지 않는 것으로 보입니다.

혹시 아래 코드를 비슷하게 작성하신걸까요?
image

Process 인터페이스는 메서드를 하나만 정의하고 있습니다.

이때, hello() 내에서 작성된 람다식은 Process의 구현체로써 run 메서드를 구현하게 됩니다.

즉, run 메서드를 구현한 구현체가 hello(Process process)로 전달되게 되고 proccess.run() 호출시 구현된 run 메서드가 실행되게 됩니다.

만약 Proccess 내 정의된 메서드가 2개 이상이라면 위와 같은 코드에서 오류가 발생합니다. 어떤 메서드를 구현해야 하는지 알 수 없기 때문입니다. 따라서, 함수형 인터페이스의 경우 1개의 메서드만 정의하도록 합니다.

이와 관련된 자세한 부분은 람다와 인터페이스(또는 함수형 인터페이스)로 검색하셔서 학습해 주세요.

감사합니다.

1

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용에 대한 정확한 답변을 드리기 위해 제공된 정보 및 문서에 관련된 내용이 없기 때문에 직접적인 답변을 드릴 수 없습니다. 하지만, 일반적인 상황을 가정하여 설명 드리겠습니다.

Java에서 람다 표현식은 익명 함수의 한 형태로서, 특정 인터페이스의 구현체를 간결하게 표현할 수 있게 해줍니다. 여기서의 Piece는 함수형 인터페이스일 가능성이 높으며, value 메소드는 추상 메소드로 선언되어 있을 것입니다. 함수형 인터페이스란 단 하나의 추상 메소드를 가진 인터페이스를 의미합니다.

람다 표현식을 이용하여 Piece 인터페이스의 구현체를 제공함으로써 print 메소드에 전달하는 것이 가능해집니다. 람다 표현식 () -> { /* actions */ }Piece 인터페이스의 value 메소드를 구현하는 것과 같은 효과를 나타내며, 이로 인해 print 메소드 내에서 piece.value(); 호출이 가능하게 됩니다.

정확한 구현 방식이나 Piece 인터페이스의 정의는 제공된 정보에 포함되어 있지 않아 상세히 설명드릴 수 없으나, Java의 람다 표현식과 함수형 인터페이스에 대한 개념으로 이해할 수 있습니다.

권정익님의 프로필 이미지
권정익

작성한 질문수

질문하기