Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- github
- AR게임
- raycast
- 소규모프로젝트
- 게임개발
- callbyreference
- ARProgect
- 로케트
- 리듬게임에디터
- AR세팅
- callbyvalue
- AR Foundation
- 유니티
- ExtensionMethod
- C#
- Quaternion
- 병맛게임
- Euler
- 게임
- 리듬게임
- Unity
- 짐벌락
- 깃허브
- 확장메서드
- 인터페이스
- 1인개발
- 게임제작
- ar
- 델리게이트
- 레이캐스트
Archives
- Today
- Total
Ssssong += Dev
[C#] 인터페이스 본문
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("난다 슬라임");
}
}
이렇게 날지 않는 슬라임과 나는 슬라임을 구별할 수 있다.
<코드없는 프로그래밍> 채널 인터페이스 영상 참고
+) 추상클래스와 인터페이스
인터페이스는 추상클래스의 일종. 추상클래스가 설계도라고 하면 인터페이스는 계약서라고 할 수 있다.
인터페이스를 상속받은 클래스는 인터페이스 안에 든 함수를 반드시 사용하여야 하기에,
해당 클래스가 어떤 건물(추상클래스)의 속성을 지니건 간에 반드시 문(인터페이스)을 가지고 있다는 사실을 보장받을 수 있다.
따라서 추상클래스는 기능의 상속과 확장을,
인터페이스는 기능의 구현을 강제하기 위하여 사용하는 설계적인 차이가 있다.
'개발 > 공부' 카테고리의 다른 글
[유니티] 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 |