1-1. 위와 같은 코드에서, 다음과 같이 다중 상속을 하는 것이 가능할까요? 가능/불가능하다면 이유는 무엇일까요?
불가능하다.
C#에서는 클래스의 다중상속을 지원하지 않는다. 만약 C와 B가 인터페이스였다면 다중 상속이 가능했을 것이다.
1-2. 만약 C#에서 다중 상속이 지원되었다면, 클래스 D는 어떤 문제에 직면하게 될까요?
클래스 B or C를 살펴보면 같은 이름의 메서드가 존재한다. 이런 경우 모호성 문제가 발생할 것이라고 생각한다.
이는 "다이아몬드 문제(Diamond Problem)"라고 불리며, 어떤 Display 메서드를 호출해야 할지 결정하는 데 어려움이 있다.
2-1. 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
상속선언을 통해 파생 클래스가 기본 클래스의 모든 공용 및 보호된 멤버를 상속받게 한다. public class B : A
2-2. 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
다중 상속을 사용한 객체 지향 프로그래밍에서 발생하는 모호성 문제, 이 문제는 두 개의 클래스가 동일한 기본 클래스를 상속받고, 그 클래스들을 다시 다른 클래스가 상속받을 때 발생한다. C#의 경우에는 원칙적으로 클래스간의 다중상속을 막아 이 문제를 처음부터 예방하고 있다. 그러나 인터페이스는 다중 상속을 지원 하는데 인터페이스간 똑같은 메서드를 가졌다 하더라도 명시적 인터페이스 구현(explicit interface implementation)을 통해 모호성을 해결할 수 있다.
2-3. 인터페이스란 무엇인가요?
강제 구현을 통한 함수명의 통일화와 다중 상속을 통해 원하는 기능을 탈부착 하기 위해 사용하는 것, 클래스도 물론 다른 클래스에 상속이 가능하나, 다중 상속이 불가능 하며 이 점이 인터페이스와 가장 큰 차이이다.
2-4. 인터페이스와 추상클래스의 차이는 무엇인가요?
다중 상속 가능 여부
인터페이스: 다중 상속이 가능, 한 클래스가 여러 인터페이스를 구현할 수 있다.
추상 클래스: 단일 상속만 가능, 한 클래스는 하나의 추상 클래스만 상속받을 수 있다.
사용 목적
인터페이스: 특정 행위를 규정하고 계약을 정의하는 데 사용된다. 객체가 무엇을 할 수 있는지를 명시적으로 정의한다.
추상 클래스: 공통된 기본 구현을 제공하며, 관련 클래스 간에 코드를 공유하고 일관된 기본 동작을 제공하기 위해 사용된다.
멤버의 종류
인터페이스: 인스턴스 필드, 생성자, 소멸자는 가질 수 없다.
추상 클래스: 필드, 생성자, 소멸자, 속성, 메서드 등을 가질 수 있다.
'C# > Knowledge' 카테고리의 다른 글
C# 심화 문법 (0) | 2024.07.11 |
---|---|
GC 가비지 컬렉터 (0) | 2024.07.11 |
스택 메모리 vs 힙 메모리 (0) | 2024.07.09 |
콜백, delegate, event (0) | 2024.07.04 |
객체지향 프로그래밍 (0) | 2024.07.04 |