interface 사용하기

DevCho1107

·

2020. 2. 3. 14:53

Interface는 어떻게 사용할까?







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
 
void OnTriggerEnter(Collider other)
{
    Potion manaPotion = other.GetComponent<Potion>();
    if(manaPosion != null)
    {
        manaPosion.Use();
    }
 
    Scroll townScroll= other.GetComponent<Scroll >();
    if(townScroll!= null)
    {
        townScroll.Use();
    }
}
 
cs


위 코드는 충돌한 상대방 컴포넌트를 가능한 한 모든 아이템 타입으로 검사하는데,
충돌한 상대방의 컴포넌트가 Posion인지 Scroll인지 모르기 때문이다.
게임에는 수십 혹은 수백개의 아이템이 존재 할 수 있는데, 위 방식으로는 효율적인 코드라고 할 수 없을 것이다.
인터페이스를 사용하여 간결하게 바꿔보자. 



1
2
3
4
5
6
7
8
9
10
11
using UnityEngine;
 
void OnTriggerEnter(Collider other)
{
    IItem item = other.GetComponent<IItem>();
    if(item != null)
    {
        item.Use();
    }
}
 
cs

IItem 인터페이스를 상속한 클래스의 오브젝트는 IItem 타입으로 취급할 수 있다.
인터페이스는 세부적인 타입과 구체적인 구현을 따지지 않는다. 

인터페이스의 이러한 특징을 Loose coupling 이라고 부른다.

1. 인터페이스는 어떤 메소드를 반드시 구현한다는 계약이다.
2. 인터페이스를 상속한 클래스는 해당 인터페이스 메소드를 public 으로 반드시 구현해야 한다. 
3. 여러 타입을 하나의 인터페이스로 다룰 수 있다.


참고서적 - 레트로의 유니티 게임프로그래밍 에센스


'< Programming > > C#' 카테고리의 다른 글

익명함수와 람다식  (0) 2020.02.04
System.Action ? ( 델리게이트 )  (0) 2020.02.03
유니티 스크립트 : 지정 축 기준으로 회전  (0) 2020.01.09
박싱 언박싱  (0) 2020.01.07
유니티 스크립트 정리 (3일차)  (0) 2019.12.19