1. Interface를 사용하는 이유
Interface를 사용하는 가장 큰 이유는 다중 상속을 위해서입니다.
Class의 경우 일반적으로 한개의 클래스만 상속을 받을 수 있는데, 이를 보완할 수 있는 방법이 Interface입니다.
상태를 나타내는 Condition이라는 클래스가 있습니다.
이 클래스는 체력, 배고픔, 스태미너와 같은 어떠한 상태를 나타내기 위한 Class로,
어떠한 Value값을 줄이거나 더하거나 할 수 있는 기능이 포함되어 있습니다.
Condition의 구조를 가진 체력, 배고픔, 스태미너를 나타내는 health, hunger, stamina을 생성해주었습니다.
여기서 만약 데미지를 입어야하는 함수가 필요하다면, 해당 함수가 필요한 변수는 health 하나 일 것입니다.
따라서, Condition 클래스 자체의 데미지를 입히는 함수를 구현해놓자니, 이후에 해당 함수를 사용하지 않는
객체들도 존재해서, 애매한 이 상황을 해결 할 수 있는게 인터페이스입니다.
이렇게 인터페이스를 사용하면 다중 상속이 가능하기 때문에, 필요한 기능을 따로 분리하여 상속받아 사용할 수 있습니다.
상속받은 클래스는 인터페이스의 내용은 반드시 해당 기능을 구현을 해야합니다.
2. Interface의 장점
이렇게 힘들게 Interface를 정의하고 또 번거롭게 상속받은 클래스에서 구현을 해야하는
Interface의 장점은 아래와 같습니다.
1. 구현할 내용을 까먹지 않을 수 있다.
예를 들어 플레이어와 몬스터와 같이 어떠한 유닛들은 공격, 방어와 같이 특정한 기능이 반드시 구현되야하는 경우가
있을 겁니다. 그 경우 미리 Interface를 상속 받아 놓으면 해당 기능을 이후에 잊지 않고 구현할 수 밖에 없게 됩니다.
2. 인터페이스 변수를 만들어서 넣어서 원할때 호출할 수 있다
IDamagable 형식의 변수를 만들어서 그 안의 IDamagable을 상속받은 오브젝트의 IDamagable 컴포넌트를 넣어주면
원하는 타이밍의 해당 인터페이스를 상속받은 오브젝트의 인터페이스 함수를 호출할 수 있습니다.
3. 예외 처리할 때 좋다
위처럼 트리거 충돌시 IDamagable을 상속 받은 오브젝트만 해당 조건에 걸리게 함으로써,
일일이 충돌체의 Tag값 비교를 하지 않아도, IDamagable을 상속 받은 친구들만을 대상으로 어떠한 동작을 해야할때,
세밀하게 분류해서 예외처리를 할 수 있습니다.
즉, 서로 아무런 연관이 없을 것 같은 다른 객체라도 같은 인터페이스를 상속받았다는 교집합이 생긴다면,
그것으로 조건을 걸어서 그 대상들에게 원하는 동작을 실행할 수 있다는 점입니다.
이외에도 많은 장단점이 존재하지만, 써야할 타이밍을 잘 알고 인터페이스를 사용할 수 있다면 더 가독성이나, 유지보수에 좋은 프로그램을 만들 수 있겠다는 생각이 듭니다.
'C#' 카테고리의 다른 글
C# List, ArrayList, Dictionary (0) | 2024.03.19 |
---|---|
C# BlackJack (1) | 2024.01.08 |
C# SnakeGame (1) | 2024.01.06 |
C# virtual, override (1) | 2024.01.05 |
C# Partial (2) | 2024.01.05 |