'C# 인터페이스'에 해당되는 글 1건

728x90

C# 인터페이스

- 인터페이스는 메서드, 속성(Property), 이벤트, 인덱서만을 가질 수 있으며, 이를 직접 구현하지 않는다.

- 인터페이스는 필드를 포함할 수 없다.

- 정의부분만 표현하고, 구현 부분은 상속받은 클래스에서 구현한다. (구현이라 함은 {}가 포함된 거)
- 인터페이스는 추상 멤버(abstract member)로만 구성된 추상 Base 클래스(abstract base class)와 개념적으로 유사하다.
- 클래스가 인터페이스를 가지는 경우 해당 인터페이스의 모든 멤버에 대한 구현(implementation)을 제공해야 한다.
- C# 클래스가 인터페이스를 갖는 경우 인터페이스의 모든 멤버에 대한 구현을 제공해야 한다.

- 여러개의 인터페이스를 부모로 둘 수 있다. (다중 상속 가능)
- 인터페이스로 객체를 생성할 수는 없다.

참고사항
public class Staff : IEmployee
를 보면 C#은 상속이 Class 인지, Interface 인지 구별없이 사용한다.
Java 는 Class 상속은 extends, Interface 구현은 implements 로 구별하고 있다.
그래서 C#에서는 인터페이스라는 걸 구별하기 위해 암묵적으로 대문자 I를 붙여주는 거 같다.

public class Staff : IEmployee

출처: https://link2me.tistory.com/1671 [소소한 일상 및 업무TIP 다루기]


예제 1

using System;

namespace Interface_01
{
    interface IEmployee
    {
        // 멤버 앞에 접근제한자 사용 안함
        string getName();
        void setName(string n);
        int getCounter();
    }

    public class Staff : IEmployee
    {
        // IEmployee 구현, 인터페이스라는 걸 구분하기 위해서 앞에 대문자 I를 붙인다.
        private String name;
        private int counter;
        public static int NOofEmployees;

        public string getName()
        {
            return name;
        }

        public void setName(string name)
        {
            this.name = name;
        }

        public int getCounter()
        {
            return counter;
        }

        public Staff() // 생성자
        {
            counter = ++counter + NOofEmployees;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string name;
            Console.Write("직원 수 입력: ");
            Staff.NOofEmployees = int.Parse(Console.ReadLine());

            Staff my = new Staff();
            Console.Write("신입 직원의 이름을 입력하세요: ");
            name = Console.ReadLine();
            my.setName(name);

            Console.WriteLine("▷ 직원 정보 ◁");
            Console.WriteLine("직원 번호 : {0}, 직원이름 : {1} : ", my.getCounter(),my.getName());
          
        }
    }
}


예제2 : 프로퍼티 속성을 이용한 인터페이스 구현

using System;

namespace Interface_02
{
    interface IEmployee
    {
        // 멤버 앞에 접근제한자 사용 안함
        string Name { get;set; } // 읽기, 쓰기 모두 가능한 프로퍼티
        int Counter { get; }  // 읽기 전용 프로퍼티
    }

    public class Staff : IEmployee
    {
        // IEmployee 구현, 인터페이스라는 걸 구분하기 위해서 앞에 대문자 I를 붙인다.
        private String name;
        private int counter;
        public static int NOofEmployees; // static 키워드를 사용해서 객체 생성없이 필드 사용

        public string Name  // 읽기, 쓰기 모두 가능한 프로퍼티
        {
            get { return name; }
            set { name = value; }
        }

        public int Counter  // 읽기 전용 프로퍼티
        {
            get { return counter; }
        }

        public Staff() // 생성자
        {
            counter = ++counter + NOofEmployees;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string name;
            Console.Write("직원 수 입력: ");
            Staff.NOofEmployees = int.Parse(Console.ReadLine());

            Staff my = new Staff();
            Console.Write("신입 직원의 이름을 입력하세요: ");
            name = Console.ReadLine();
            my.Name = name;

            Console.WriteLine("▷ 직원 정보 ◁");
            Console.WriteLine("직원 번호 : {0}, 직원이름 : {1} : ", my.Counter, my.Name);

        }
    }
}



Base()
this는 각각의 메모리를 구분하기위한 방법이며, 생성자를 호출하기 위한 방법으로 사용된다.
이외에 부모와 자식간의 메모리를 구분하기 위한 키워드가 바로 base키워드이다.
부모 클래스의 이름으로는 부모 클래스의 생성자를 호출할 수 없고 base 키워드를 사용해야 한다.

    public class Parent
    {
        private int i;

        public Parent(int i)
        {
            this.i = i;
        }
    }

    public class Child : Parent
    {
        private int j;

        public Child(int i, int j) : base(i)    // 부모 클래스의 생성자를 호출하려면 base 키워드를 사용해야 한다.
        {
            this.j = j;
        }
    }
 


Program.cs


'C# > 문법 및 기능' 카테고리의 다른 글

C# 프로퍼티(Property)  (0) 2019.08.19
C# 구조체(Struct)  (0) 2019.08.14
C# 접근 제한자(Access Modifier)  (0) 2019.08.13
자바와 C#의 차이점  (0) 2016.12.27
C# NameValueCollection  (0) 2016.03.20
블로그 이미지

Link2Me

,