강의

멘토링

로드맵

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

cypark님의 프로필 이미지
cypark

작성한 질문수

오버라이딩 (자식클래스 선언자로 타입을 부모클래스로 잡을 이유)

작성

·

202

·

수정됨

0

Car c1 = new (Bus);

위와 같이 생성하면 부모의 타입만을 사용할 수 있다고 한다면

굳이 자식클래스 선언자로 타입을 부모클래스로 잡을 이유가 무엇인가요?

Car c1 = new (Car); 와 다를 것이 무엇인지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

Car c1 = new Bus(); 와 같이 사용하는 경우에는 Bus 클래스가 Car 클래스의 서브클래스일 때 이렇게 타입을 잡을 수 있습니다. 이 방식은 다형성이라는 객체 지향 프로그래밍 원칙을 활용한 것인데요, 몇 가지 이유가 있습니다.

  • 코드의 유연성: Car 타입의 참조 변수 c1Bus 뿐만 아니라 Car의 다른 서브클래스 객체도 참조할 수 있습니다. 이는 특정한 타입의 객체 대신 더 일반적인 형태를 참조함으로써 코드를 더 유연하게 만들 수 있습니다.
  • 인터페이스 기반 프로그래밍: 특정 인터페이스나 추상 클래스를 타입으로 사용하면 구현 클래스를 바꾸더라도 타입을 바꿀 필요가 없어 코드 변경을 최소화할 수 있습니다.
  • 단일 책임 원칙: Car 타입으로 선언함으로써 해당 변수가 Car의 책임만을 가지고 있음을 명시적으로 표현할 수 있으며, Car와 관련된 작업만을 수행하도록 제한할 수 있습니다.

Car c1 = new Car();Car c1 = new Bus();의 차이는, 후자의 경우 c1이 참조하는 객체가 실제로 Bus 클래스의 인스턴스이기 때문에, Car 클래스와 Bus 클래스에 있는 공통 기능만 사용하되, 실제 실행 시에는 Bus 클래스에 오버라이딩된 메서드가 있다면 해당 메서드가 실행됩니다.

다만, 자세한 내용은 실제로 사용하는 프로그래밍 언어와 상황에 따라 다를 수 있으니, 주어진 내용으로는 제한적인 답변을 드릴 수 밖에 없음을 양해 바랍니다.

cypark님의 프로필 이미지
cypark

작성한 질문수

질문하기