[C# 문법] C# 인터페이스

참조



C# 인터페이스란?

  • 인터페이스는 계약을 정의합니다.
  • 해당 계약을 구현하는 class 또는 struct는 인터페이스에 정의된 구성원의 구현을 제공해야 합니다.


인터페이스 개요

  • 인터페이스는 추상 기본 클래스와 비슷합니다. 인터페이스를 상속하는 모든 비추상 형식에서는 해당 멤버를 모두 구현해야 합니다.
  • 인터페이스는 직접 인스턴스화할 수 없습니다.
  • 인터페이스는 이벤트, 인덱서, 메서드 및 속성을 포함할 수 있습니다.
  • 인터페이스는 메서드의 구현을 포함하지 않습니다.
  • 클래스와 구조체는 여러 인터페이스에서 상속할 수 있습니다.
  • 인터페이스 자체는 여러 인터페이스에서 상속할 수 있습니다.


인터페이스 구현

  • C# 에서 클래스가 인터페이스를 갖는 경우 인터페이스의 모든 멤버에 대한 구현을 제공해야 합니다.
  • C# 에서는 인터페이스로부터 직접 new를 사용하여 객체를 생성할 수 없습니다.
  • 아래의 클래스는 IComparable 라는 인터페이스를 갖는 경우로, IComparable.CompareTo() 메서드를 구현한 예제 입니다.
using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new();
            MyClass myClass2 = new();
            Console.WriteLine(myClass.CompareTo(myClass2));
        }
    }

    public class MyClass : IComparable
    {
        private int key;
        private int value;

        public int CompareTo(object obj)
        {
            MyClass target = obj as MyClass;
            return this.key.CompareTo(target.key);
        }
    }
}
0


인터페이스 활용

  • C# 실무에서 클래스와 인터페이스를 잘 정의하고 사용하는 것은 매우 중요합니다.
  • 비지니스를 객체지향 프로그래밍으로 디자인하고 구현하는데 가장 중요한 핵심이기 때문입니다.
  • 실무에서 인터페이스로 사용하기에 좋은 DBConnection 관련 내용을 인터페이스로 정의해 보도록 하겠습니다.


프로젝트 구조

  • 프로젝트는 크게 Interface 폴더, DBConnection 폴더, Program.cs 이렇게 크게 3가지로 구성하였습니다.



예제 코드

Program.cs

using interfaceTest.DatabaseUtil;
using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IDbConnection dbCon = GetDbConnection("Oracle");
            Console.WriteLine($"연결된 DB 이름은 {dbCon.GetDbConnection()} 입니다.");

            IDbConnection dbCon2 = GetDbConnection("SQLServer");
            Console.WriteLine($"연결된 DB 이름은 {dbCon2.GetDbConnection()} 입니다.");

            IDbConnection dbCon3 = GetDbConnection("Dapper");
            Console.WriteLine($"연결된 DB 이름은 {dbCon3.GetDbConnection()} 입니다.");
        }

        public static IDbConnection GetDbConnection(string dbName)
        {
            IDbConnection dbConn = null;

            switch (dbName)
            {
                case "SQLServer":
                    dbConn = new SqlConnection();
                    break;
                case "Oracle":
                    dbConn = new OracleConnection();
                    break;
                case "Dapper":
                    dbConn = new DapperConnection();
                    break;
            }
            return dbConn;
        }
    }
}


IDbConnection.cs

namespace interfaceTest
{
    public interface IDbConnection
    {
        public string GetDbConnection();
    }
}


DapperConnection.cs

using System;

namespace interfaceTest.DatabaseUtil
{
    public class DapperConnection : IDbConnection
    {
        public string GetDbConnection()
        {
            return "Dapper";
        }
    }
}


OracleConnection.cs

namespace interfaceTest.DatabaseUtil
{
    class OracleConnection : IDbConnection
    {
        public string GetDbConnection()
        {
            return "Oracle";
        }
    }
}


SqlConnection.cs

namespace interfaceTest.DatabaseUtil
{
    class SqlConnection : IDbConnection
    {
        public string GetDbConnection()
        {
            return "SQLServer";
        }
    }
}


실행 결과

연결된 DB 이름은 Oracle 입니다.
연결된 DB 이름은 SQLServer 입니다.
연결된 DB 이름은 Dapper 입니다.
  • 위와 같이 Interface를 사용하면, 코드 설계 및 구조를 깔끔히 할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY