[C#] Virtual(가상), Abstract(추상), Interface(인터페이스)

Jinho Lee·2025년 2월 25일
0

개요

  • 상속을 활용하던 중, virtual과 abstract의 사용 개념이 헷갈렸다. 이런 일이 다시 없도록 정리한다.

Virtual(가상 함수)

  • 메소드, 속성, 인덱서 또는 이벤트 선언을 한정하는데 사용된다.

  • 자식 클래스에서 필요에 따라 오버라이드할 수 있지만 반드시 할 필요는 없다.

  • 자체적으로 구현할 수 있다.

Abstract(추상 클래스, 함수)

  • 자식 클래스에서 구현해야하는 클래스 및 멤버, 메소드를 만들 수 있다.

  • 여러 자식 클래스에서 공유할 기본 클래스의 공통적인 정의를 제공한다. 즉, 반드시 오버라이드 해야 한다.

  • 자체적으로 구현할 수 없다.

  • 추상 클래스는 인스턴스화(객체 생성)할 수 없다.

  • 추상 클래스는 구현을 갖되, 인스턴스를 가질 수 없다.

  • 추상 클래스는 추상 메소드를 가질 수 있다.

  • 추상 메소드는 구현을 갖지 못하지만 파생클래스에서 반드시 구현하도록 강제한다.

  • 즉, 추상 클래스를 상속하는 클래스들이 반드시 이 메소드를 가질 거라는 약속이다.

Interface(인터페이스)

  • 클래스가 따라야 하는 약속이다.
    • 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야 할지를 정의한다.
  • Abstract와 비슷하게 자식 클래스에서 공유할 공통 정의를 제공하지만, 멤버필드를 갖지 않는다. 대신 프로퍼티는 사용이 가능하다.

  • 여러 자식 클래스가 공통적으로 가질 기능을 추가하기 위해 사용한다. 즉, Abatract와 같이 반드시 오버라이드 해야 한다.

  • 자체적으로 구현할 수 없고, 인스턴스화(객체 생성)할 수 없다.

  • 접근제한자는 public만 사용이 가능하다.

VirtualAbstractInterface
구현기본 구현 가능구현 불가구현 불가
오버라이딩선택필수필수
목적기본 기능을 override될 수 있도록 제공자식 클래스가 공유할 공통 정의를 제공자식 클래스가 공통적으로 가질 기능을 추가
호환되지 않는 키워드static, abstract, private, overridestatic, virtualstatic, abstract, private, protected, virtual

참고

0개의 댓글

관련 채용 정보