해결된 질문
작성
·
358
0
나도코딩님 인터페이스 부분에서 상속받는 자식이
private Detectable detecotor;
private Reportable reportor; 라는 인스턴스 변수를 왜 선언하는지 잘모르겠고 어떤기능을 하는지 잘모르겠습니다
그리고 private Detectable detecotr
=> 접근지정자,클래스이름,변수명
이렇게 만드신게 맞는지도 궁금합니다
상속받은 자식클래스입니다
public class FactoryCam extends Camera implements Detectable, Reportable {
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 showMainFeature() {
System.out.println("화재 감지");
}
@Override
public void detect() {
detector.detect();
}
@Override
public void report() {
reporter.report();
}
}
그리고 메인클래스입니다
public class _02_Interface {
public static void main(String[] args) {
// 인터페이스
FactoryCam factoryCam = new FactoryCam();
factoryCam.setDetector(advancedFireDetector);
factoryCam.setReporter(videoReporter);
factoryCam.detect();
factoryCam.report();
}
}
그리고 여기서
factoryCam.setDetector(advancedFireDetector);
이 지문을 해석하자면
setDetctor 라는 세터에
advancedFireDetector 라는 자식클래스에 기능넣고
factory객체로 불러온다
가 맞을까요??
답변 1
2
안녕하세요?
먼저 아래 코드는 int i 변수와 비슷하게 접근제어자, 클래스명(=자료형), 변수명 순으로 만든 것이 맞습니다.
private Detectable detector;
private int i;
우리가 햄버거 집에 가면 보통 햄버거 + 감자튀김 + 콜라로 구성이 되는 세트 메뉴가 있습니다. 이때 햄버거와 감자튀김은 자체적으로 만든다고 해도 콜라는 햄버거집이 아닌 코카콜라에서 만든 것을 그대로 줍니다. 콜라가 아닌 다른 탄삼음료로 변경을 원하는 경우에도 햄버거집이 아닌 각 탄산음료 제조사에서 만든 제품을 그대로 주죠. 이것과 동일하게 생각하시면 됩니다.
FactoryCam 은 화재 감지와 자동 신고 기능이 추가된 공장 카메라입니다. 그런데 화재 감지 기능은 카메라 회사에서 직접 만드는 것이 아니라 햄버거집의 콜라처럼 화재 감지 기능 개발 전문 업체에서 제품을 사와서 사용한다고 하면 어떨까요? 햄버거 세트 메뉴에 콜라 캔 하나만 추가로 넣는 것처럼 그냥 화재 감지 기능을 넣기만 하면 될 겁니다.
만약 보다 개선된 버전 또는 새로운 업체에서 만든 제품을 사용한다면 기존 제품을 새 것으로 교체하면 될 겁니다. 콜라를 사이다로 바꾸는 것처럼요. 이를 쉽게 하기 위해서 setDetector() 를 제공하였고 메인 메소드에서는 간단히 이 메소드를 호출하면서 부품을 전달해주면 클래스 내에서는 이를 참조할 수 있는 detector 를 통해서 전달받은 화재 감지 기능을 사용할 수 있게 되는 것입니다.
즉, 아래의 코드는
factoryCam.setDetector(advancedFireDetector);
setDetector 라는 setter 를 통해서 advancedFireDetector 를 설정하고, factoryCam 객체에서 화재 감지 기능을 사용할 때 advancedFireDetector 의 화재 감지 기능을 사용한다, 정도로 이해하시면 됩니다.
마치 햄버거 세트 메뉴에 고객의 주문에 따라 콜라 또는 사이다를 넣는 것과 유사합니다.
hamburgerSetMenu.setDrink(coke); // 콜라
hamburgerSetMenu.setDrink(cider); // 사이다
감사합니다 😊
햄버거집 콜라.. 그렇게 설명해주시니 객체에 대해 어느정도 알것같습니다
감사합니다 나도코딩님!