Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C#] 추상 클래스와 프로퍼티 본문

Programming/C#

[Programming/C#] 추상 클래스와 프로퍼티

scii 2020. 9. 14. 01:39

추상 클래스는 클래스처럼 구현된 프로퍼티를 가질 수도 있는 한편, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다. 추상 클래스에서는 이것을 "추상 프로퍼티 (Abstract Property)" 라고 한다. 추상 메소드가 그랬던 것처럼, 추상 프로퍼티 역시 인터페이스의 프로퍼티와 다를 것이 없다. 파생 클래스가 해당 프로퍼티를 구현하도록 강제하는 것일 뿐이다.

추상 프로퍼티는 인터페이스처럼 구현을 비워놓은 것만으로는 추상 프로퍼티를 만들 수 없다. 그리하면 C# 컴파일러가 자동 구현 프로퍼티로 간주하고 구현을 자동으로 채워 넣을 것이다.
그래서 추상 프로퍼티는 abstract 한정자를 이용하여 선언한다.

abstract class 추상 클래스이름
{
    abstract 데이터형식 프로퍼티이름
    {
        get; set;
    }
}

추상 프로퍼티 사용 예

using System;

namespace CSharpExample
{
    abstract class Product
    {
        private static int serial = 0;

        // 구현을 가진 프로퍼티
        public string SerialID
        {
            get
            {
                return String.Format("{0:d5}", serial++);
            }
        }

        // 구현이 없는 추상 프로퍼티
        abstract public DateTime ProductDate
        {
            get; set;
        }
    }

    class MyProduct : Product
    {
        // 파생 클래스는 부모 추상 클래스의 모든 추상 메소드와
        // 추상 프로퍼티를 재정의해야 한다.
        public override DateTime ProductDate
        {
            get; set;
        }
    }

    internal class MainApp
    {
        static int Main(string[] args)
        {
            Product product_1 = new MyProduct()
            {
                ProductDate = new DateTime(2015, 5, 5)
            };

            Console.WriteLine("Product: {0}, Product Date: {1}",
                product_1.SerialID, product_1.ProductDate);

            Product product_2 = new MyProduct()
            {
                ProductDate = new DateTime(2018, 1, 5)
            };

            Console.WriteLine("Product: {0}, Product Date: {1}",
                product_2.SerialID, product_2.ProductDate);

            return 0;
        }
    }
}


/* 결과

Product: 00000, Product Date: 5/5/2015 12:00:00 AM
Product: 00001, Product Date: 1/5/2018 12:00:00 AM

*/

추상 클래스는 구현을 가진 프로퍼티와 구현이 없는 추상 프로퍼티 모두를 가질 수 있다.

Comments