작성
·
270
1
(메인 클래스 부분 아래로 내려가지지 않아서 실행 결과를 여기에 먼저 올립니다 😅)
참고로, 함수형 인터페이스를 사용할 때는 아래와 같이 함수 시그니처(함수 이름, 반환형, 파라미터 타입)만 동일하고 바디 부분은 달라도 정상적으로 실행이 되더군요.
package practice;
@FunctionalInterface
public interface Reportable {
void report(int time); // 신고
}
package practice.detector;
@FunctionalInterface
public interface Detectable {
String name = "감지자"; // 인터페이스도 필드를 가질 수 있음
void detect(); // 감지
}
package practice;
public class NormalReporter implements Reportable
{
@Override
public void report(int time) {
System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다.");
}
}
package practice;
public class VideoReporter implements Reportable {
@Override
public void report(int time) {
System.out.println("직전 " + time + "초 영상과 함께 신고를 진행합니다.");
}
}
package practice.detector;
public class FireDetector implements Detectable{
@Override
public void detect() {
System.out.println("일반 성능으로 화재를 감지합니다.");
}
}
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();
}
}
답변 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초 영상과 함께 신고를 진행합니다.
일반 성능으로 화재를 감지합니다.
향상된 성능으로 화재를 감지합니다.
감사합니다.
아! 그러네요 이미 참조 객체 변수에 1:1 매핑을 해놨으니 report하고 detect 2개의 함수만 있으면되겠네요 피드백 주셔서 감사합니다 😄