제로의영역

9.6 인터페이스의 프로퍼티 본문

C#

9.6 인터페이스의 프로퍼티

아이큐제로 2019. 7. 22. 17:52

* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.

* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.

 

1. 인터페이스는 메소드뿐만 아니라 프로퍼티와 인덱서도 가질 수 있음.

2. 프로퍼티나 인텍서를 가진 인터페이스를 상속하는 클래스가 "반드시" 해당 프로퍼티와 인덱서를 구현해야 함.

3. 인터페이스의 프로퍼티 선언이 클래스의 자동 구현 프로퍼티 선언과 모습이 동일.

 

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

< 인터페이스의 프로퍼티 선언 형식 >

 

interface IProduct
{
	string ProductName
    {
    	get;
        set;
    }
}

class Product:IProduct
{
	private string productName;
    
    public string ProductName
    {
    	get{retrun productName;}
        set{productName = value;}
    }
}

< 인터페이스와 이를 상속하는 파생클래스의 예 >

 

예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ex8._9
{
    interface INamedValue           //인터페이스
    {
        string Name                 /* 자동구현 프로퍼티처럼 구현이 없지만, C#컴파일러는 
                                      인터페이스의 프로퍼티에 대해서는 자동으로 구현해주지 않음. 
                                      (인터페이스는 구현부가 없기 때문) */
        {
            get;
            set;
        }

        string Value
        {
            get;
            set;
        }
    }

    class NamedValue:INamedValue    /* INamedValue 인터페이스를 상속하는 NamedValue 클래스는
                                      반드시 Name과 Value를 구현해야 함. 자동 구현 프로퍼티를
                                      이용하는 것도 가능. */
    {
        public string Name          // 인터페이스의 Name을 구현한 자동구현 프로퍼티
        {
            get;
            set;
        }

        public string Value         // 인터페이스의 Value를 구현한 자동구현 프로퍼티
        {
            get;
            set;
        }
    }
    class MainProgram
    {
        static void Main(string[] args)
        {
            NamedValue name = new NamedValue()         
            { Name = "이름", Value = "박상현" };      

            NamedValue height = new NamedValue()
            { Name = "키", Value = "177Cm" };

            NamedValue weight = new NamedValue()
            { Name = "몸무게", Value = "90Kg" };

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

실행 결과:

 

이름:박상현
키:177Cm
몸무게:90Kg