Ssssong += Dev

[C#] 인터페이스 본문

개발/공부

[C#] 인터페이스

ssong_dev 2022. 5. 16. 10:46

C#에서 사용하는 디자인패턴인 인터페이스이다.

유니티에서 IPointerHandler 시리즈 사용할 때 조금씩 맛봤었다.

기능을 인터페이스로 정의해 두고, 필요한 클래스에 상속하여 사용할 수 있다.

public interface IInterface
{
    // 인터페이스는 약속이다.
    // 인터페이스 이름 규칙 : 앞에 I를 붙인다.
    // 인터페이스 안에는 함수만 만들 수 있고 기능의 형태만 만들어 줄 수 있다.

    //인터페이스 함수는 앞에 public이 생략되어 있다.
    void Function();
}

public interface IFly
{
    void Fly();

}

public interface IAttack
{
    void Attack();
}

 

public class Dragon : Monster, IAttack, IFly
{
    public override void Hit(float damage)
    {
        Hp -= damage / 2;
        Debug.Log("드래곤은 절반의 대미지를 입음");
    }

    public void Fly()
    {
        Debug.Log("난다 드래곤");
    }

    public void Attack()
    {
        Debug.Log("드래곤이 때림");
    }
}

 

Attack(), Fly() 함수를 Monster에 구현해 둘 경우 날지 않는 몬스터와 공격이 없는 몬스터가 있을 시 기능을 따로 분리하기 어렵다.

 

public class Slime : Monster
{
    public override void Hit(float damage)
    {
        Hp -= damage * 2;
        Debug.Log("슬라임은 두 배의 대미지를 입음");
    }
}
public class WingSlime : Slime, IFly
{
    public void Fly()
    {
        Debug.Log("난다 슬라임");
    }
}

 

이렇게 날지 않는 슬라임과 나는 슬라임을 구별할 수 있다.

 

 

<코드없는 프로그래밍> 채널 인터페이스 영상 참고

https://youtu.be/WBJm4U86m5k

 

 

 

+) 추상클래스와 인터페이스

인터페이스는 추상클래스의 일종. 추상클래스가 설계도라고 하면 인터페이스는 계약서라고 할 수 있다.

인터페이스를 상속받은 클래스는 인터페이스 안에 든 함수를 반드시 사용하여야 하기에,

해당 클래스가 어떤 건물(추상클래스)의 속성을 지니건 간에 반드시 문(인터페이스)을 가지고 있다는 사실을 보장받을 수 있다.

따라서 추상클래스는 기능의 상속과 확장을,

인터페이스는 기능의 구현을 강제하기 위하여 사용하는 설계적인 차이가 있다.

 

'개발 > 공부' 카테고리의 다른 글

[유니티] Stencil buffer  (0) 2022.05.27
[유니티] 거리, 방향 계산 참고 포스트  (0) 2022.05.23
[유니티] Raycast  (0) 2022.05.10
[유니티, C#] layerMask와 비트연산자  (0) 2022.05.09
[C#] 구조체와 클래스의 값 복사  (0) 2022.05.09