오랜만에 순수 C#의 기능 중 하나인 Interface에 대해서 설명해 보겠다.
Interface의 거시적인 의미를 설명하자면 여러 클래스에서 같은 메서드를
공유하고 싶을 때, 이를 효율적으로 관리할 수 있게 해주는 기능을 가진다.
이런 건 설명만으로 이해하기 불가능하다. 의미만 알고 예시를 보자.
public interface IVehicle
{
void Start();
void Stop();
}
public class Car : IVehicle
{
public void Start()
{
Console.WriteLine("Car started.");
}
public void Stop()
{
Console.WriteLine("Car stopped.");
}
}
public class Bike : IVehicle
{
public void Start()
{
Console.WriteLine("Bike started.");
}
public void Stop()
{
Console.WriteLine("Bike stopped.");
}
}
public class Program
{
public static void Main(string[] args)
{
IVehicle myCar = new Car();
IVehicle myBike = new Bike();
myCar.Start(); // 출력: Car started.
myBike.Start(); // 출력: Bike started.
myCar.Stop(); // 출력: Car stopped.
myBike.Stop(); // 출력: Bike stopped.
}
}
이렇게 IVehicle이라는 인터페이스를 만들어두고, 안에 Start와 Stop을 정의해 둔다.
비어있는 함수이다. 이후 같은 구조를 공유하는 클래스에 인터페이스를 구현시키고 (상속과 다름)
함수를 다시 정의하면 된다. 앞서 미리 정의해 두었기에 비슷한 기능을 하는 여러 클래스를
한 번에 관리해 줄 수 있게 된다.
이렇게 정의한 여러 클래스를 Program 클래스의 Main에서 실행할 때는
IVehicle 타입으로 받아오고 new키워드로 정의해주기만 하면 Start와 Stop을 사용할 수 있게 된다.
편리한 클래스 관리를 위한 기능이라고 봐도 된다.
새로운 탈 것이 나타나 새 클래스를 만들 상황이 생겨도 기존 구조가 동일하게 적용되기 때문에
매우 빠르게 클래스를 완성시키고 기존 코드에 연결시킬 수 있게 된다.
여기까지 interface에 대해서 간단히 설명해 봤다. 여러 번 들어본 기능이지만
실제 프로젝트에서 써본 적은 딱히 없었다. 차라리 Data 형태로 만들거나 해서
변수를 공유하는 방식으로 했었는데 메서드를 공유시키는 방법도 좋은 것 같다.
사실 이번 interface에 관한 글은 바로 적을 제네릭에 관련한 글을 위한
토대로 봐야 한다. 링크가 올라올 테니 순수 C# 기법들에 관해서 공부 중이라면
한번 보시길 추천드립니다.
https://alpaca-code.tistory.com/251 (제네릭)
처음에는 게임 개발만을 위해, 유니티만 알았지만 심화할수록 확실히 순수 언어도
알아야 하는 것 같다. 그런 의미에서 다음 책은 순수 C#에 대한 책으로 구매해야겠다.
이상으로 도움이 되었길 바라며,
끝.
'게임 개발 > C#' 카테고리의 다른 글
C# 코드 생략 기법 - 메서드 체이닝(Method Chaining) (0) | 2024.12.11 |
---|---|
C# Generic의 기능, 사용법, 예시 (2) | 2024.11.25 |
C# 에서 문자열을 반복하는 가장 간단한 방법 - new string (0) | 2024.11.03 |
이스케이프(escape) - 특수문자를 문자열로 바꾸는 법, 출력하는 법. (0) | 2024.08.01 |
C#에서 ?와 ??의 의미, null을 판단하는 방법(null 조건부 연산자, null 병합 연산자) (2) | 2024.07.30 |
댓글