C#
[C#] 인터페이스(Interface)
SSABI
2020. 5. 11. 16:51
반응형
인터페이스(Interface)
인터페이스는 약속입니다. 차는 우측 방향으로 통행해야 하고, 초록불일때 통행을 해야하는 것 처럼 인터페이스는 클래스가 따라야 하는 약속을 정의합니다. 즉 인터페이스는 인터페이스로부터 파생된 클래스가 어떤 메소드를 구현할지를 정의합니다. 인터페이스에서 정의한 메소드는 파생된 클래스에서 반드시 구현해야 합니다.
인터페이스는 다음과 같은 특징을 가지고 있습니다.
- 인스턴스를 만들 수 없음
접근 제한자(Access Modifier)
를 사용할 수 없고 모두public
으로 선언됨메소드(Method)
,이벤트(Event)
,인덱서(Indexer)
,프로퍼티(Property)
만을 가짐- 파생 클래스는 인터페이스에 선언되어 있는 모든
메소드(Method)
,프로퍼티(Property)
를 구현해야 함 - 인터페이스는 인터페이스를 상속할 수 있음
인터페이스 문법은 다음과 같습니다.
interface IInterfaceName
{
int PropertyName
{
get;
set;
}
void MethodName(int num);
}
인터페이스에있는 프로퍼티
, 메소드
는 모두 public
입니다. 인터페이스이름은 관례상 이름 앞에 I
를 붙여서 작명합니다.
이해를 돕기위해 예를 들어 보겠습니다.Score
클래스는 점수를 저장하는 클래스이고 점수를 다양한 형태의 파일로 저장하려고 합니다. 이때 인터페이스를 활용하면 다양한 형태의 파일로 저장할 수 있습니다. 다음은 인터페이스를 활용한 예제 코드입니다.
interface IFile
{
void Save(List<int> item);
}
// 점수를 텍스트 파일로 저장하는 클래스
class TextFile : IFile
{
public void Save(List<int> item)
{
string scoreText = "";
for(int i=0; i<item.Count; i++)
{
scoreText += item[i].ToString();
if (i < item.Count - 1)
scoreText += " ";
}
File.WriteAllText("score.txt", scoreText);
Console.WriteLine("txt 파일로 저장");
}
}
// 점수를 CSV 파일로 저장하는 클래스
class CSVFile : IFile
{
public void Save(List<int> item)
{
string scoreText = "";
for (int i = 0; i < item.Count; i++)
{
scoreText += item[i].ToString();
if (i < item.Count - 1)
scoreText += ",";
}
File.WriteAllText("score.csv", scoreText);
Console.WriteLine("csv 파일로 저장");
}
}
class Score
{
private List<int> scores;
private IFile file;
public Score()
{
scores = new List<int>();
}
public void SetFileType(IFile file)
{
this.file = file;
}
public void AddScore(int score)
{
scores.Add(score);
}
public void SaveScore()
{
if(file != null)
file.Save(scores);
}
}
class Program
{
static void Main(string[] args)
{
Score score = new Score();
score.AddScore(100);
score.AddScore(90);
score.AddScore(80);
score.AddScore(70);
TextFile textFile = new TextFile();
CSVFile csvFile = new CSVFile();
score.SetFileType(textFile);
score.SaveScore();
score.SetFileType(csvFile);
score.SaveScore();
}
}
Score
클래스는 어떤 파일로 저장할지에 대한 클래스를 SetFileType(IFile file)
메소드로 설정한 후, Save(List<int> item)
메소드만 호출하면 점수가 해당하는 형태의 파일로 저장됩니다.
Score
클래스는 IFile
인터페이스를 상속받은 클래스라면 내부가 어떻게 구현 되어 있던 상관없이 그저 Save(List<int> item)
만 호출해주면 되기 때문에 코드의 일관성을 높일 수 있습니다.
반응형