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

이승언님의 프로필 이미지
이승언

작성한 질문수

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

퀴즈 #8

QUIZ8 질문입니다.

작성

·

27

0

 

package chap_08.camera;

import chap_08.detector.AccidentDetector;
import chap_08.detector.Detectable;
import chap_08.reporter.Reportable;
import chap_08.reporter.VideoReporter;

public class SpeedCam extends Camera{

    private Detectable detector;
    private Reportable reporter;

    public void setDetector(Detectable detector) {
        this.detector = detector;
    }

    public void setReporter(Reportable reporter) {
        this.reporter = reporter;
    }

    @Override
    public void showMainFearture() {
        System.out.println("속도 측정, 번호 인식");
    }

    public void detect(){
        this.detector.detect();
    }

    public void report(){
        this.reporter.report();
    }

    public void setDetector(AccidentDetector accidentDetector) {

    }

    public void setReporter(VideoReporter videoReporter) {
    }
}
package chap_08;

import chap_08.camera.SpeedCam;
import chap_08.detector.AccidentDetector;
import chap_08.reporter.VideoReporter;

public class _Quiz_08 {
    public static void main(String[] args) {
        SpeedCam speedCam = new SpeedCam();
        speedCam.setDetector(new AccidentDetector());
        speedCam.setReporter(new VideoReporter());
        speedCam.detect();
        speedCam.report();
    }
}

 

image.png

 

전부 다 강의 보면서 쳤는데 저렇게 에러가 떠서요. 뭐가 문제일까요?

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

코드 하단에 보니 아마 자동으로 생성된 것으로 보이는 불필요한 메소드 2개가 추가되어 있네요. 이 둘을 없애면 올바로 동작할 거에요 😊

    // 삭제해주세요
    public void setDetector(AccidentDetector accidentDetector) {

    }

    public void setReporter(VideoReporter videoReporter) {
    }

삭제 후에도 계속 문제가 된다면 다시 질문글 남겨주세요!

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 이승언님.

NullPointerException은 Java에서 매우 흔한 오류로, 객체가 null 상태에서 그 객체의 메서드를 호출하거나 속성에 접근하려고 할 때 발생합니다. 제공된 코드와 에러 이미지를 바탕으로, 이 문제는 SpeedCam 클래스의 detector 혹은 reporter 객체가 초기화되지 않은 상태에서 detect() 또는 report() 메서드를 호출하려고 하기 때문에 발생한 것으로 보입니다.

이 문제를 해결하기 위한 몇 가지 방법을 제시 드리겠습니다.

문제 원인 및 해결 방안

  1. 제대로 된 Setter 메서드 사용하기: 코드에 중복된 setDetector()setReporter() 메서드가 있습니다. 객체를 설정하기 위한 올바른 메서드를 사용했는지 확인하세요. 중복된 메서드를 제거하고 올바르게 정의된 메서드를 남겨두세요.
   public void setDetector(Detectable detector) {
       this.detector = detector;
   }

   public void setReporter(Reportable reporter) {
       this.reporter = reporter;
   }
  1. 객체 생성 시 초기화 여부 확인하기: SpeedCam 객체 생성 이후 메서드 호출 전에 setDetector()setReporter() 메서드가 제대로 호출되었는지 확인하세요.

main() 메소드에서 다음과 같이 사용하고 있습니다.

   SpeedCam speedCam = new SpeedCam();
   speedCam.setDetector(new AccidentDetector());
   speedCam.setReporter(new VideoReporter());
   speedCam.detect();
   speedCam.report();

이 부분은 올바르게 호출되고 있어야 합니다. 하지만 초기화되지 않았을 가능성을 염두에 두고 확인해 보세요.

유사한 문제 해결 사례

이미지와 유사한 문제 상황을 다루고 있는 게시글이 있습니다. 아래 링크를 참고하여 문제를 해결하는 데 도움을 받을 수 있습니다.

이 게시물에서 다른 사용자들이 이와 유사한 문제를 해결한 사례를 확인하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이승언님의 프로필 이미지
이승언

작성한 질문수

질문하기