클래스의 상속관계에서 특정 기능은 반드시 자식클래스에서 구현하게끔 강제하는 방법이 있다.
먼저 추상클래스인데, 이는 실체가 없는 클래스를 의미한다.
실체가 없다는 것은 객체로 만들 수 없다는 의미이다.
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함수가 실행된다.
아직은 사용해보지 않아서 크게 와닿지않고 유용하겠구나 하는 생각만 든다.
앞으로의 프로젝트에서 사용해봐야겠다.
'C#' 카테고리의 다른 글
delegate (대리자), Event (0) | 2025.01.20 |
---|---|
프로퍼티 (0) | 2025.01.20 |
일반화 ( Generic ) (0) | 2025.01.19 |
배열, List, Dictionary (0) | 2025.01.19 |
클래스의 특징 (0) | 2025.01.19 |