본문 바로가기

C#/Knowledge

상속과 인터페이스

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