ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 함수를 상속받아서 충돌이 일어나게 되거나

    올바른 기능이 작동되지 않을 것

     

    설명 문제

    💡 질문을 직접 설명해보고, 모르는 부분이 있다면 알아보는 시간을 가집시다.

     

    1. 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
    2. 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
    3. 인터페이스란 무엇인가요?
    4. 인터페이스와 추상클래스의 차이는 무엇인가요?

    1번 답 : 클래스를 다른 클래스로 상속하기 위해서는 자식클래스가 기본클래스의 모든 공용 및 보호된 멤버를 상속받게 한다. ex) public class B : A

     

    2번 답 : 다중상속을 받음으로써 위와 같이 여러 클래스의 다르게 정의된 같은 함수를 파생 클래스가 상속 받으면서 생기는 문제이다. C#에서는 애초에 다중상속이 되지 않기 때문에 이 다이아몬드 문제가 발생하지 않는다. 인터페이스는 다중상속이 가능하지만 인터페이스간에 같은 메서드를 가졌다고 해도 명시적 인터페이스 구현으로 모호성을 해결할 수 있다.

     

    3번 답 : 인터페이스란 메서드를 파생 클래스에 강제 구현을 시키고, 다중상속이 가능한 점을 이용하여 원하는 기능을 편하게 탈부착 하기 위해서 사용된다. 다중 상속이 가능한 것과 강제 구현이 가장 큰 특징이다.

     

    4번 답 : 인터페이스와 추상클래스는 둘 다 강제 구현이라는 공통점이 있으나 가장 큰 차이점은 다중 상속이 가능한지 아닌지이다. 또 다른 특징을 보자면 인터페이스는 클래스와 다르게 인스턴스 필드, 생성자, 소멸자는 가질 수 없으며 추상 클래스는 기본 클래스와 마찬가지로 인스턴스 필드, 생성자, 소멸자와 속성 메서드 등을 다 가질 수 있다.

Designed by Tistory.