inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

함수형 인터페이스 (전반전)

안녕하세요 지난 시간에 배운 인터페이스(후반전)을 함수형 인터페이스로 만들어보았습니다.

331

Ambition

작성한 질문수 61

1

 

(메인 클래스 부분 아래로 내려가지지 않아서 실행 결과를 여기에 먼저 올립니다 😅)

참고로, 함수형 인터페이스를 사용할 때는 아래와 같이 함수 시그니처(함수 이름, 반환형, 파라미터 타입)만 동일하고 바디 부분은 달라도 정상적으로 실행이 되더군요.

📋Reportable 인터페이스

package practice;

@FunctionalInterface
public interface Reportable {
    void report(int time); // 신고
}

📋Detectable 인터페이스

package practice.detector;

@FunctionalInterface
public interface Detectable {
    String name = "감지자"; // 인터페이스도 필드를 가질 수 있음
    void detect(); // 감지
}

💻NormalReporter 클래스

package practice;

public class NormalReporter implements Reportable
{
    @Override
    public void report(int time) {
        System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다.");
    }
}

💻VideoReporter 클래스

package practice;

public class VideoReporter implements Reportable {
    @Override
    public void report(int time) {
        System.out.println("직전 " + time +  "초 영상과 함께 신고를 진행합니다.");
    }
}

💻FireDetector 클래스

package practice.detector;

public class FireDetector implements Detectable{

    @Override
    public void detect() {
        System.out.println("일반 성능으로 화재를 감지합니다.");
    }
}

💻AdvancedFireDetector 클래스

package practice.detector;

public class AdvancedFireDetector implements Detectable{

    @Override
    public void detect() {
        System.out.println("향상된 성능으로 화재를 감지합니다.");
    }
}

💻메인 클래스

package practice;

import practice.detector.Detectable;

public class practice {
    public static void main(String[] args) {

        //* 함수형 인터페이스 실행
        Reportable reportableNormal = (time) -> System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다.");
        Reportable reportableVideo = (time) -> System.out.println("직전 " + time +  "초 영상과 함께 신고를 진행합니다.");
        Detectable detectableFire =   () -> System.out.println("일반 성능으로 화재를 감지합니다.");
        Detectable detectableAdvancedFire =   () -> System.out.println("향상된 성능으로 화재를 감지합니다.");

        reportbyNormalReporter(reportableNormal, 20);
        reportbyVideoReporter(reportableVideo, 10);
        detectbyFireDetector(detectableFire);
        detectbyAdvancedFireDetector(detectableAdvancedFire);
    }

    public static void reportbyNormalReporter(Reportable reporter, int time) {
        reporter.report(time);
    }

    public static void reportbyVideoReporter(Reportable reporter, int time) {
        reporter.report(time);
    }

    public static void detectbyFireDetector(Detectable detector) {
        detector.detect();
    }

    public static void detectbyAdvancedFireDetector(Detectable detector) {
        detector.detect();
    }
}

java 객체지향 람다식 함수형인터페이스

답변 1

0

나도코딩

안녕하세요?
배운 내용을 복습하면서 직접 응용해보시는 것은 개발 공부에 매우 큰 도움이 됩니다. 함수형 인터페이스로 잘 구현해주셨는데 아마 연습하시는 과정에서 다른 클래스들도 더 이상 필요하지 않은데 남겨두신 것 같아서 코드를 다음과 같이 조금 간소화 하였습니다. 또한 Reportable 과 Detectable 을 받는 메소드는 2개면 충분할 것 같아서 나머지 2개는 삭제하고 메소드 이름을 변경해보았으니 참고 바랍니다 😊

@FunctionalInterface
public interface Reportable {
    void report(int time); // 신고
}
@FunctionalInterface
public interface Detectable {
    void detect(); // 감지
}
public class Practice {
    public static void main(String[] args) {

        //* 함수형 인터페이스 실행
        Reportable reportableNormal = (time) -> System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다.");
        Reportable reportableVideo = (time) -> System.out.println("직전 " + time +  "초 영상과 함께 신고를 진행합니다.");
        Detectable detectableFire =   () -> System.out.println("일반 성능으로 화재를 감지합니다.");
        Detectable detectableAdvancedFire =   () -> System.out.println("향상된 성능으로 화재를 감지합니다.");

        reportbyReporter(reportableNormal, 20);
        reportbyReporter(reportableVideo, 10);
        detectbyDetector(detectableFire);
        detectbyDetector(detectableAdvancedFire);
    }

    public static void reportbyReporter(Reportable reporter, int time) {
        reporter.report(time);
    }

    public static void detectbyDetector(Detectable detector) {
        detector.detect();
    }
}

실행 결과는 다음과 같습니다.

20 초 동안 일반 화재 신고를 진행합니다.
직전 10초 영상과 함께 신고를 진행합니다.
일반 성능으로 화재를 감지합니다.
향상된 성능으로 화재를 감지합니다.

감사합니다.

0

Ambition

아! 그러네요 이미 참조 객체 변수에 1:1 매핑을 해놨으니 report하고 detect 2개의 함수만 있으면되겠네요 피드백 주셔서 감사합니다 😄

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

93

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

185

3

JDK 버전 문의

0

129

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

121

2

Iterator 문의

0

105

1

코드 순서 문의

0

142

1

클래스 메소드

0

149

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

80

2