CS 기초강좌 3. C# interface 인터페이스
c#에는 인터페이스라는 계념이 있습니다.
일관된 형태의 라이브러리를 만들려고 할 때 관계성이 있는 클래스들이 사용하는 메서드의 이름을 약속하는 문법이다.
클래스는 만드는 사람과, 사용하는 사람이 인터페이스를 알고 있으면 메소드 들의 규칙성이 있음을 미리 알 수 있다.
다음 예를 보자.
자료구조를 구현할 때
using System;
class Vector
{
public void Clear() { }
public void Add() { }
public void Remove() { }
}
class Queue
{
//여기에도?
}
class Program
{
static void Main(string[] args)
{
}
}
위와 같이, 자료구조 클래스를 구현한다고 가정하자. Vector를 먼저 구현하고, 그다음 Queue를 구현하려 보니 이름이 같음 메소드가 필요할 것 같다. 구현은 다르겠지만, 왜냐? 자료구조를 제공할 끄으면 뭔가 일관된 규칙성이 있어야 사용자가 편할 것 아닌가. 그래서 다음과 같이 작업한다고 하자.
class Vector
{
public void Clear() { }
public void Add() { }
public void Remove() { }
}
class Queue
{
//여기에도?
public void Clear() { }
public void add() { } //a. ?? 뭔가 보이는가?
public void Remove() { }
}
그래서 Queue 에도 구현했다고 하자. Queue에서 add가 철자가 Vector와 다르다. 일관성이 떨어진다. 앞으로 당신이 추가적인 자료구조 스택, 리스트를 제공한다고 해도 아마도 똑같은 이름을 메소드를 제공해야 할 것이고, 이것은 어느 정도 규칙성이 가지게 될 것이다. 위와 같은 실수가 없으리라는 보장도 없고, 미리 자료구조에는 이런 규칙성이 있다고 명시적으로 표시하면 더욱 좋을 것이다.
이와 같은 경우에 인터페이스를 사용하면 좋다.
아래 코드를 보자.
interface IData
{
void Clear();
void Add();
void Remove();
}
class Vector : IData
{
public void Clear() { }
public void Add() { }
public void Remove() { }
}
class Queue : IData
{
public void Clear() { }
public void Add() { }
public void Remove() { }
}
인터페이스를 쓰고 구현하지 않는다면, 친절하게 컴파일러가 오류를 알려준다.
c#이 인터페이스 라는 문법을 둔 이유는, 여러분은 분명 다양한 클래스를 설계하게 될 것이고, 다양성을 가진 클래스를 설계하게 될 것이다. 이럴 경우, 그들이 특정한 인터페이스를 가질 수 있는지 먼저 고민해보고, 가능하면 구현하는 것을 권장한다.
몇 가지 문법적 특성
interface IData
{
void Clear();
void Add();
void Remove();
}
인터페이스의 메소드는 접근 지정자를 표기하지 않는다. public , proteced... 하지만 c# 8.0부터는 가능하다.
interface IData
{
void Clear();
}
class Vector : IData
{
public void Clear() { }
public override void Clear() { } //x
public virtual void Clear() { } //o
}
인터페이스를 통하여 구현된 메소들들의 특성은 override가 아니다. 해당 메소드가 구현되어야 한다는 것이지 이미 구현된 것을 상속하는 것이 아니다. virtual은 될 수가 있다. 아니면 일반 함수로 제작해야 한다.
봐주셔서 감사합니다.
'IT > C#(CS)' 카테고리의 다른 글
CS 기초강좌 6. 값 타입과 참조 타입, 스택과 힙, struct와 class (4) | 2020.11.11 |
---|---|
CS 기초강좌 5. C# System.Object에 대하여 (4) | 2020.10.19 |
CS 기초강좌 4. C# 타입, 변수의 특징 (2) | 2020.10.18 |
CS 기초강좌 2. C# 클래스 기초 (12) | 2020.10.16 |
CS 기초강좌 1. C# 콘솔 프로젝트 세팅, 표준 입출력 (0) | 2020.10.14 |
댓글