[C# 문법] C# 인터페이스
- C#/C# 문법
- 2021. 11. 29. 19:18
참조
- https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/interface
- https://www.csharpstudy.com/CSharp/CSharp-interface.aspx
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
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# ValueTuple (0) | 2021.12.01 |
---|---|
[C# 문법] 순수 함수란? (0) | 2021.11.29 |
[C# 문법] Reflection - Class Property 개수 확인 및 반복문 사용하기 (0) | 2021.11.24 |
[C# 문법] C# 어셈블리 버전 구하는 방법 (0) | 2021.11.14 |
[C# 문법] C# Enum 열거형 LINQ 사용하기 (0) | 2021.11.10 |
이 글을 공유하기