C#

C#_인터페이스: 인터페이스를 사용하는 이유(다중상속)

S_pot 2021. 6. 4. 14:29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

abstract class Smart
{
    int iNum1;
    int iNum2
    { set { } get { return 100; } }
    int iNum3 { get; set; }

    void test1() { }
    public abstract void test2();
}


interface IBasic2
{
    // int iNum;   // 인터페이스는 안에 인스턴스 변수를 선언할 수 없다.
      // int iNum2{set{    } get{    }} // 불가: 세부설정 사용안됨
    // void test2() { } // 불가: 구현한 메소드는 허용하지 않는다.
    
    int iNum { get; set; }    // 허용 : 속성, 프로퍼티
    void test(); // 허용: 인터페이스에서는 body가 없어도 abstract를 적지 않는다.
    // = 본체가 없는 메소드 이름만 허용한다. = 속성과 추상메소드만 허용
    // 인터페이스는 철저하게 설계위주

    // 추상클래스가 인터페이스의 기능을 모두 수행할 수 있는데도 
    // 인터페이스를 사용하는 이유는?
    // 다중상속을 구현할 때 사용된다.
    // 클래스와 비슷하지만 클래스와는 다르다.
   
  
}

interface IBasic
{
    int TestInstanceMethod();
    int TestProperty { get; set; }
}

    class Program
    {
        static void Main(string[] args)
        {
        // IBasic aIBasic = new IBasic(); // 인터페이스는 객체가 없으므로 ()와 같은 객체를 생성할 수 없다.
        IBasic aIBasic; // 즉 인터페이스는 상속받는 용도로 사용한다.

        TestClass aTestClass = new TestClass();
        }