상속(Inheritance)
부모클래스로부터 데이터와 기능을 물려받는것.
C#은 다중상속을 지원하지 않는다.(C++은 지원)
부모클래스는 자식 클래스에게 물려주고 싶은 것만 줄 수 있다! → 상속의 내용은 부모가 결정. (접근한정자 public, protected에 한함)
class 파생클래스 : 기반클래스{
}
< 상속관계에서 생성자와 소멸자 호출 순서 >
- 자식클래스를 생성하면 부모클래스의 생성자가 먼저 호출되고 자식클래스의 생성자가 호출된다.
- 소멸 순서는 자식클래스가 먼저 소멸되고 부모클래스가 나중에 소멸된다.
* 유니티기반에서는 생성자와 소멸자 기능을 이용하는것보다는 유니티 이벤트함수의 호출순서를 고려해 프로그램을 작성한다.
생성자 : 클래스의 인스턴스가 생성될 때(new 로 할당될때) 한번 호출됨. 클래스 이름과 동일한 함수 모양임.
소멸자 : 클래스의 인스턴스가 메모리에서 소멸될때 한번 호출됨. ~클래스이름
생성자와 소멸자는 생략할 수 있다.
1. 접근한정자(public, protected)에 따른 접근 권한
임의의 TestClass를 만들었다. 각 멤버변수들은 public, protected, private 한정자를 가진다.
TestClass를 상속받은 A클래스에서 각 변수에 접근하고 있다.
그러나 data변수는 private이므로 상속되지 않아 접근할 수 없다.
2. 상속관계에서 생성자와 소멸자 호출 순서
2-1. 생성자와 소멸자 호출
2-2. A클래스는 TestClass를 상속받는 상태일때 부모의 생성자가 먼저 호출되고 자식의 생성자가 나중에 호출됨을 볼 수 있음
+추가)
MonoBehaviour를 상속받아야 컴포넌트 클래스가 된다. → 유니티상에 게임오브젝트로 추가될 수 있다는 뜻
MonoBehaviour는 컴포넌트 기능을 하는 클래스. 자식클래스는 이 기능을 물려받아 컴포넌트로 작동할 수 있다!
예제 )
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class A
{
public virtual void ReadData(string name)
{
Debug.Log("A : " + name);
}
public void LoadData(string str)
{
ReadData(str);
}
}
public class B : A
{
public override void ReadData(string name)
{
Debug.Log("B : " + name);
}
}
public class C : A
{
public override void ReadData(string name)
{
Debug.Log("C : " + name);
}
}
public class InheritExample : MonoBehaviour
{
void Start()
{
B b = new B();
b.LoadData("test1.txt");
C c = new C();
c.LoadData("test2.csv");
// 다형성 적용한 방식으로 표현하면
A b1 = new B();
b1.LoadData("test3.csv");
A c1 = new C();
c1.LoadData("test4.csv");
}
}
b.LoadData()를 호출하면 A클래스의 LoadData()로 들어가 ReadData()를 실행한다.
B와 C클래스는 각각 ReadData()를 재정의 했기 때문에 부모의 함수가 아닌 재정의 한 함수를 호출하게 된다.
데이터 타입은 A이지만 b1과 c1은 실제 메모리 할당은 B와 C로 받았다.
→ 동일한 자료구조에 넣을 수 있기 때문에 이러한 형식을 사용한다. Ex) 리스트, 배열 ...
https://bang2019.tistory.com/30
클래스의 다형성
Polymorphism public class Base{ } public class Child : Base{ } public class Child2 : Base{ } // 사용시 // 일반적으로 클래스를 사용할때 Base tmp = new Base(); // 다형성을 적용하면 Base tmp = new Chil..
bang2019.tistory.com
https://bang2019.tistory.com/46
상속 예제
public class CharacterChild_Idle { Player player = null; public void Init() { player = GameObject.Find("Player").GetComponent (); } } public class CharacterChild_Walk { Player player = null; public..
bang2019.tistory.com
'Unity' 카테고리의 다른 글
마우스 입력한 곳으로 움직이기 (0) | 2021.05.21 |
---|---|
마우스 클릭 (0) | 2021.05.21 |
스택메모리 힙메모리 (0) | 2021.04.16 |
LocalPosition VS WorldPosition (0) | 2021.04.16 |
Transform? transform? (0) | 2021.04.16 |