인터페이스(Interfaces)는 무엇인가?
인터페이스는 C#에서 추상화를 구현하는 또 다른 방법이다. 어떤 클래스가 어떤 메서드들을 가져야 하는지를 정의하는 일종의 규칙이라고 할 수 있다.
추상 클래스, 추상 메서드에 대해서는 아래 포스트에 자세히 정리해 두었으니 참고하자.
2024.04.23 - [C# 기초] - [C#기초] 추상(abstract) 클래스와 메서드
인터페이스의 특징은 선언부에 메서드 구현을 포함하지 않는다는 것이다. 단지 메서드의 이름, 매개변수, 반환값의 형식 등을 정의한다.
예시1:
// interface
interface IAnimal
{
void animalSound(); // interface method (does not have a body)
void run(); // interface method (does not have a body)
}
// 코드 출처 : w3schools
- 인터페이스의 이름은 시작 부분에 문자 ‘I’로 시작하는 것이 일반적이다. 클래스와 인터페이스를 구분하기 위함이다.
인터페이스 사용 방법
인터페이스를 구현하는 방법은 클래스가 클래스를 상속할 때와 같이 ‘:
’ 기호를 사용한다.
예시2:
// 인터페이스
interface IAnimal
{
void animalSound(); // 인터페이스 메서드
}
// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
public void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
}
}
// 코드 출처 : w3schools
인터페이스의 특징
인터페이스에 정의해 놓은 메서드는 구현부에서 반드시 재정의 해야 한다. 예시2
에서는 IAnimal
인터페이스에 animalSound
메서드가 정의되었다.
이를 Pig
클래스에서 구현할 때 animalSound
메서드를 재정의해주었다. 추상화는 추상 클래스 내에 정의된 메서드 외에도 이를 상속받은 클래스에서 새로운 메서드나 변수 등을 선언할 수 있었지만, 인터페이스는 불가능하다.
인터페이스는 기존에 정의된 속성과 메서드 외에는 추가할 수 없다.
예시3:
// 추상화(Abstraction) 예제
// 추상 클래스인 Animal
abstract class Animal
{
// 추상 메서드 MakeSound 정의
public abstract void MakeSound();
}
// Animal을 상속받은 Dog 클래스 (살)
class Dog : Animal
{
// MakeSound 메서드 구현
public override void MakeSound()
{
Console.WriteLine("멍멍!");
}
// Dog 클래스의 특정한 기능과 속성
public void WagTail()
{
Console.WriteLine("꼬리를 흔들며 행복해요!");
}
}
// Animal을 상속받은 Cat 클래스 (장기)
class Cat : Animal
{
// MakeSound 메서드 구현
public override void MakeSound()
{
Console.WriteLine("야옹!");
}
// Cat 클래스의 특정한 기능과 속성
public void Purr()
{
Console.WriteLine("산소온거니까 편안해요.");
}
}
// 인터페이스(Interface) 예제
interface IShape
{
void Draw();
}
class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("사각형을 그립니다.");
}
}
class Circle : IShape
{
public void Draw()
{
Console.WriteLine("원을 그립니다.");
}
}
class Program
{
static void Main(string[] args)
{
// 추상화 예제
Animal dog = new Dog();
dog.MakeSound(); // "멍멍!" 출력
dog.WagTail();
Animal cat = new Cat();
cat.MakeSound(); // "야옹~" 출력
cat.Purr();
// 인터페이스 예제
IShape rectangle = new Rectangle();
rectangle.Draw(); // "사각형을 그립니다." 출력
IShape circle = new Circle();
circle.Draw(); // "원을 그립니다." 출력
}
}
또한 인터페이스는 여러 개를 한 번에 구현할 수 있다. 예시4
를 살펴보자. IFirstInterface와 ISecondInterface를 선언했고, DemoClass는 이 두 인터페이스를 모두 구현했다. 이를 다중 인터페이스라고 한다. 구현은 ,
기호로 구분하여한다.
예시4:
interface IFirstInterface
{
void myMethod(); // interface method
}
interface ISecondInterface
{
void myOtherMethod(); // interface method
}
// Implement multiple interfaces
class DemoClass : IFirstInterface, ISecondInterface
{
public void myMethod()
{
Console.WriteLine("Some text..");
}
public void myOtherMethod()
{
Console.WriteLine("Some other text...");
}
}
class Program
{
static void Main(string[] args)
{
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}
다중 인터페이스를 사용하는 이유는 C#이라는 언어가 클래스의 다중 상속을 지원하지 않기 때문이다.
요약정리
- 인터페이스는 추상화를 구현하는 또 다른 방법이며, 어떤 클래스가 어떤 메서드를 가져야 하는지 정의하는 일종의 규칙이다.
- 추상 클래스와 마찬가지로 직접적으로 객체 생성을 할 수 없다.
- 인터페이스의 선언부의 메서드에는 구현을 포함하지 않는다.
- 인터페이스 구현 시 해당 메서드를 반드시 재정의해야 한다.
- 인터페이스에는 속성과 메서드가 포함될 수 있으나 필드/변수는 포함 될 수 없다.
- 인터페이스 멤버는 기본적으로
abstract
와public
이다. - 인터페이스는 생성자를 포함할 수 없다.
'게임 & 게임개발 > C# 기초' 카테고리의 다른 글
[C#기초] 열거형(Enums) (0) | 2024.04.26 |
---|---|
[C#기초] 추상(abstract) 클래스와 메서드 (0) | 2024.04.25 |
[C#기초] 상속(Inheritance)과 다형성(Polymorphism) (0) | 2024.04.24 |
[C#기초] 프로퍼티(Property)와 Get, Set 메서드 💊 (0) | 2024.04.23 |
[C#기초] 접근 제한자(Access Modifier)란 무엇일까? (0) | 2024.04.22 |