Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
07-08 04:38
관리 메뉴

nomad-programmer

[Programming/C#] 인터페이스의 프로퍼티 본문

Programming/C#

[Programming/C#] 인터페이스의 프로퍼티

scii 2020. 9. 14. 01:02

인터페이스는 메소드뿐만 아니라 프로퍼티와 인덱서도 가질 수 있다. 프로퍼티나 인덱서를 가진 인터페이스를 상속하는 클래스가 반드시 해당 프로퍼티와 인덱서를 구현해야 하는 것은 물론이다.
당연한 이야기지만 인터페이스에 들어가는 프로퍼티는 구현을 갖지 않는다. 인터페이스의 프로퍼티 선언이 클라스의 자동 구현 프ㅗ퍼티 선언과 그 모습이 동일하다. 다음은 인터페이스의 프로퍼티 선언 형식이다.

interface 인터페이스이름
{
    public 형식 프로퍼티1
    {
        get; set;
    }
    
    public 형식 프로퍼티2
    {
        get; set;
    }
}

다음은 프로퍼티를 갖고 있는 인터페이스와 이를 상속하는 파생 클래스의 예이다.

interface INameInfo
{
    string Name
    {
        get; set;
    }
}

class NameInfo : INameInfo
{
    private string name;
    
    // 파생 클래스는 부모 인터페이스에 선언된 모든 프로퍼티를 구현해야 한다.
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

인터페이스의 프로퍼티 사용 예

using System;

namespace CSharpExample
{
    interface INamedValue
    {
        /* 
         * 자동 구현 프로퍼티처럼 구현이 없지만, C# 컴파일러는 인터페이스의
         * 프로퍼티에 대해서는 자동으로 구현해주지 않는다.
         * 당연한 이야기다. 인터페이스는 어떤 구현도 가지지 않기 때문이다.
        */
        string Name
        {
            get; set;
        }

        string Value
        {
            get; set;
        }
    }

    class NamedValue: INamedValue
    {
        public string Name
        {
            get; set;
        }

        public string Value
        {
            get; set;
        }
    }

    internal class MainApp
    {
        static int Main(string[] args)
        {
            NamedValue name = new NamedValue()
            {
                Name = "이름",
                Value = "테스트"
            };
            NamedValue height = new NamedValue()
            {
                Name = "키",
                Value = "180"
            };
            NamedValue weight = new NamedValue()
            {
                Name = "몸무게",
                Value = "82"
            };

            Console.WriteLine($"{name.Name}: {name.Value}");
            Console.WriteLine($"{height.Name}: {height.Value}");
            Console.WriteLine($"{weight.Name}: {weight.Value}");

            return 0;
        }
    }
}


/* 결과

이름: 테스트
키: 180
몸무게: 82

*/
Comments