인프런 커뮤니티 질문&답변
인터페이스에 없는 메서드를 자식 클래스에 추가했을 때 호출하는법 (다운캐스팅?)
작성
·
286
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
인터페이스를 이용해서 여러 자동차를 만들고 운전자가 자동차의 기능을 사용하게 하는 예제에서 특정 자동차 클래스에만 있는 메서드를 만든다면 호출을 어떻게 해야될까요?
예를들어 Model3에만 자율주행 기능을 추가하고 싶어서
public void autoPilot() {
System.out.println("자율주행을 시작합니다.");
}
이런식으로 메서드가 추가됐을때 운전자가 자율주행 기능을 호춣하려면 어떻게 해야되는지 궁금합니다.
제가 비유적으로 이해한 바로는 특정 자동차에만 탑재된 기능을 인터페이스에서 알 수 없으니 따로 배워야한다 --> 운전자 클래스의 코드 수정이 필요하다였고,
실제 코드로는 운전자가 가진 Car 인스턴스가 Model3 클래스일 경우 다운캐스팅을 해서 autoPilot 메서드를 호출하는 방식으로 풀긴 했는데, 다운캐스팅이 아직 익숙치 않아서 불안한 마음도 있고 더 좋은 방법이 있을까 해서 질문 드립니다.
퀴즈
객체 지향 프로그래밍(OOP)이 기존 방식과 차별화되는 핵심 접근 방식은 무엇일까요?
프로그램을 순차적인 명령 목록으로 구성
독립적인 객체들의 협력을 통해 데이터 처리
하나의 거대한 함수로 모든 기능 구현
데이터와 처리를 분리하여 관리
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다.
비슷한 상황에 대한 답변이 있어 해당 내용을 공유드립니다. 특정 클래스에서만 제공하는 기능을 사용하려면 인터페이스에 그 기능을 추가하거나, instanceof를 사용해 해당 인스턴스가 특정 클래스인지 확인 후 다운캐스팅하는 방법이 있습니다. 하지만 OCP 원칙을 생각할 때, 인터페이스에 새로운 메서드를 추가하는 것은 다른 클래스들에 영향을 줄 수 있으며, instanceof와 다운캐스팅을 사용하는 것은 OCP 원칙에 위배될 수 있습니다. 더 나은 방법으로 새로운 인터페이스를 도입하는 방안에 대한 설명이 있으니 해당 답변을 확인해 보시기 바랍니다.
더 자세한 설명을 원하신다면 아래 링크를 참고해 주세요.
감사합니다.





