미해결
나도코딩의 자바 기본편 - 풀코스 (20시간)
안녕하세요 지난 시간에 배운 인터페이스(후반전)을 함수형 인터페이스로 만들어보았습니다.
(메인 클래스 부분 아래로 내려가지지 않아서 실행 결과를 여기에 먼저 올립니다 😅)참고로, 함수형 인터페이스를 사용할 때는 아래와 같이 함수 시그니처(함수 이름, 반환형, 파라미터 타입)만 동일하고 바디 부분은 달라도 정상적으로 실행이 되더군요.📋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();
}
}