Unity Interface

2024. 2. 1. 16:48·C#

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
'C#' 카테고리의 다른 글
  • C# List, ArrayList, Dictionary
  • C# BlackJack
  • C# SnakeGame
  • C# virtual, override
하길
하길
게임 개발을 위한 나의 모든 지식의 총 집합체
  • 하길
    Until Dawn
    하길
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (143)
      • Unreal Engine 5 (0)
      • Unity (31)
        • 3D (5)
        • 2D (7)
      • C++ (13)
      • C# (11)
      • 알고리즘 (35)
      • TIL (22)
      • 기타 (1)
      • 대장간 (12)
      • 메모 (2)
      • 게임리뷰 (0)
      • 일상 (0)
        • 챌린지 (0)
      • Article (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
하길
Unity Interface
상단으로

티스토리툴바