본문 바로가기
C#

인터페이스

by imagineer_jinny 2021. 7. 19.

인터페이스: 상속 받는 클래스에게 무조건 어떠한 함수나 프로퍼티를 만들도록 강제하는 장치

이걸 사용하면 상대방 타입을 일일이 개별로 추측할 필요 없이 한번에 인터페이스로써 다룰 수 있음.

 

인터페이스 사용하는 경우:

아이템 구현하거나 몬스터, 혹은 플레이어의 직업을 구현할 때 

상대방 아이템, 몬스터, 플레이어 직업에 상관 없이 공통적인 기능을 한번에 묶어서 처리할 때 인터페이스를 씀.

 

인터페이스가 없는 경우:

우선 코드를 설명하면 밑의 스크립트는 Player.cs 안의 OnTriggerEnter2D 함수로,

Collider2D other에는 충돌한 상대방이 들어옴.

충돌한 상대방을 가져와서 만약 그 친구가 GoldItem이나 HealthKitItem을 가지고 있으면

Use함수를 발동시켜서 아이템을 사용하는 원리.

 

근데 만약 아이템의 종류가 한두가지가 아니라면, Player 스크립트에서 아이템의 종류만큼 물어봐야함.

아이템이 100개 있으면 100개의 if문을 통해서 물어봐야 함.  -> 비효율적

 

Player.cs

HealthKitItem.cs

그럼 인터페이스를 만들어보자!

 

1. 인터페이스는 앞쪽에 대문자 'I'를 붙여줌

2. 인터페이스는 내부를 구현하지 않음.

 

인터페이스를 상속받는 친구들은 무조건 인터페이스가 강제하는 함수를 만들어야함.

GoldItem과 HealthKitItem 둘다 모두 Use() 함수를 가지고 있음.

그러나 두 친구가 어떻게 Use 함수를 구성하고 있는지는 다름

인터페이스 사용하면 타입이랑 상관 없이 공통된 함수를 사용할 수 있게 됨

 

다시 Player.cs 스크립트로 돌아와서 

충돌한 아이템이 어떤 타입인지 신경 안써.

내가 관심있는거는 너가 IItem으로써 가져와지냐가 궁금한것.

goldItem이나 healthKitItem의 고유한 함수들은 쓸 수 없지만 Use()함수는 무조건 쓸 수 있음.

 

즉, 충돌한 상대방이 누군지는 별로 안중요.

다만 충돌한 상대방이 IItem이라는 타입으로써 가져와지면 (null이 아님 -> 무조건 use라는 함수 갖고 있을 것이다)

 

간소화된 코드

'C#' 카테고리의 다른 글

프로퍼티  (0) 2021.07.19
추상 클래스  (0) 2021.07.19
오버라이드  (0) 2021.07.18
상속 + 다형성, 집합  (0) 2021.07.18
리스트(List)  (0) 2021.07.13

댓글