Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 04:51
관리 메뉴

nomad-programmer

[Programming/C#] 추상 클래스 본문

Programming/C#

[Programming/C#] 추상 클래스

scii 2020. 9. 9. 02:29

C#은 C++의 순수 가상 함수같은 말이 없다. 허나 순수 가상 함수와 같은 기능을 하는 것을 만들 수 있다. 그것은 추상 클래스를 정의하고 abstract 키워드를 사용하는 것이다.

추상 클래스와 가상 함수의 차이점

가상 함수는 재정의를 하지 않아도 컴파일 에러가 발생하지 않는다. 또한 부모 클래스에서 가상 함수는 {} 괄호가 있어야 한다. 즉, 함수 같은 구조여야 한다.

public virtual string GetData()
{
    return "";
}


추상 클래스의 추상화 함수는 재정의를 하지 않으면 컴파일 에러가 발생한다. 그리고 부모 클래스에서 {} 괄호는 필요치 않다. 선언만 존재하면 된다.

public abstract string GetData();
추상 클래스는 독자적으로 인스턴스를 생성할 수 없다. 그리고 추상 클래스를 상속 받는 파생 클래스는 추상 클래스에 정의되어 있는 추상 함수들을 모두 재정의(override) 해야 한다.

추상 클래스의 예제

using System;

namespace CSharpExample
{
    // 추상 클래스
    abstract class Abstract
    {
        // c++로 굳이 따지자면, 순수 가상 함수이다.
        // GetData함수는 여기서 정의하지 않고 상속받는 파생 클래스에서 강제 재정의를 명령한다.
        protected abstract string GetData();

        public void Print()
        {
            Console.WriteLine($"GetData Method - {GetData()}");
        }
    }

    class Base : Abstract
    {
        // 추상 클래스를 상속하였기에 
        protected override string GetData()
        {
            return "Hello World!";
        }

    }

    class MainApp
    {

        static int Main(string[] args)
        {
            Base b = new Base();
            b.Print();

            return 0;
        }
    }
}

/* 결과

GetData Method - Hello World!

*/
Comments