-
[TIL] 13주차 4일 기술 면접 대비개발일지/스파르타 코딩클럽 부트캠프 2024. 7. 15. 20:57
using System; // 상위 클래스 A public class A { public virtual void Display() { Console.WriteLine("Class A Display"); } } // 클래스 B는 클래스 A를 상속받음 public class B : A { public override void Display() { Console.WriteLine("Class B Display"); } } // 클래스 C는 클래스 A를 상속받음 public class C : A { public override void Display() { Console.WriteLine("Class C Display"); } }
1. 위와 같은 코드에서, 다음과 같이 다중 상속을 하는 것이 가능할까요? 가능/불가능하다면 이유는 무엇일까요?
public class D : B, C { }
1번 답 : 불가능하다. C#은 기본적으로 인터페이스가 아니면 다중 상속이 불가능하다.
2. 만약 C#에서 다중 상속이 지원되었다면, 클래스 D는 어떤 문제에 직면하게 될까요?
2번 답 : 서로 다른 행동으로 override 된 DIsplay 함수를 상속받아서 충돌이 일어나게 되거나
올바른 기능이 작동되지 않을 것
설명 문제
💡 질문을 직접 설명해보고, 모르는 부분이 있다면 알아보는 시간을 가집시다.
- 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
- 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
- 인터페이스란 무엇인가요?
- 인터페이스와 추상클래스의 차이는 무엇인가요?
1번 답 : 클래스를 다른 클래스로 상속하기 위해서는 자식클래스가 기본클래스의 모든 공용 및 보호된 멤버를 상속받게 한다. ex) public class B : A
2번 답 : 다중상속을 받음으로써 위와 같이 여러 클래스의 다르게 정의된 같은 함수를 파생 클래스가 상속 받으면서 생기는 문제이다. C#에서는 애초에 다중상속이 되지 않기 때문에 이 다이아몬드 문제가 발생하지 않는다. 인터페이스는 다중상속이 가능하지만 인터페이스간에 같은 메서드를 가졌다고 해도 명시적 인터페이스 구현으로 모호성을 해결할 수 있다.
3번 답 : 인터페이스란 메서드를 파생 클래스에 강제 구현을 시키고, 다중상속이 가능한 점을 이용하여 원하는 기능을 편하게 탈부착 하기 위해서 사용된다. 다중 상속이 가능한 것과 강제 구현이 가장 큰 특징이다.
4번 답 : 인터페이스와 추상클래스는 둘 다 강제 구현이라는 공통점이 있으나 가장 큰 차이점은 다중 상속이 가능한지 아닌지이다. 또 다른 특징을 보자면 인터페이스는 클래스와 다르게 인스턴스 필드, 생성자, 소멸자는 가질 수 없으며 추상 클래스는 기본 클래스와 마찬가지로 인스턴스 필드, 생성자, 소멸자와 속성 메서드 등을 다 가질 수 있다.
'개발일지 > 스파르타 코딩클럽 부트캠프' 카테고리의 다른 글
[TIL] 14주차 2일 기술면접 대비 C# 심화 문법 (0) 2024.07.17 [TIL] 13주차 5일 기술 면접 대비 ( 가비지 컬렉터, 박싱 언박싱 주의점 ) (0) 2024.07.16 [TIL] 14주차 1일 DOTween (0) 2024.07.15 [TIL] 13주차 3일 기술 면접 대비 (0) 2024.07.10 [TIL] 13주차 2일 FSM에서 신경써야 할 부분 ( 트러블 슈팅 ) (2) 2024.07.09