C#

인터페이스 ( Interface )

게임만드는학생 2025. 1. 19. 23:59

 

클래스의 상속관계에서 특정 기능은 반드시 자식클래스에서 구현하게끔 강제하는 방법이 있다. 

 

먼저 추상클래스인데, 이는 실체가 없는 클래스를 의미한다. 

실체가 없다는 것은 객체로 만들 수 없다는 의미이다. 

 

abstract class Person
{
	public abstract void Walk();
}

class Student : public Person
{
	public override void Walk(){}
}

abstract 키워드를 사용해 추상클래스와 추상함수를 만들 수 있다. 이 때, Person클래스를 상속하는 클래스는 무조건 Walk를 오버라이드해야 한다. 

 

그런데 C#에서는 다중상속을 지원하지 않는다. 따라서 만약 여러 기능을 상속받은 클래스를 만들고 싶다면 다중상속 대신 interface 를 사용하면 된다. 

 

interface 이름
{
내용
}

다음과 같이 사용하면 되는데 이름은 보통 관습처럼 앞에 I를 붙인다고 한다.

 

만약 Person중 특정사람은 점프할 수 있게 하고싶으면

interface IJumpable
{
	void Jump();
}

이처럼 만들어서

class Student : public person, IJumpable
{
	public override void Walk(){}
    public void Jump(){}

}

이렇게 구현하면 된다. 

인터페이스가 유용한 점은 또 있다. 

 

void DoJump(IJumpable j)
{
	j.jump();
}

main()
{
	IJumpable j = new Student();
    DoJump(j);

}

위 처럼 캐스팅이 가능하며, DoJump와 같은 함수를 만들어 IJumpable 인터페이스를 상속한 클래스만 함수를 호출할 수 있게하고 전해진 매개변수는 전부 jump를 구현하고 있으니 jump함수가 실행된다. 

 

아직은 사용해보지 않아서 크게 와닿지않고 유용하겠구나 하는 생각만 든다. 

앞으로의 프로젝트에서 사용해봐야겠다.