| 오버로딩
오버로딩이란 함수명은 같지만 시그니쳐(매개변수 구성)를 달리해서 여러개의 함수를 사용할 수 있는 기법을 말한다.
만약 이런 기능이 없다면, 매번 다른 명의 함수명을 생각해내야 하는 귀찮음이 발생한다.
이 오버로딩은 생성자에서 자주 사용되는데 예시를 통해 확인해보면,
public class Animal
{
public string name;
public Animal()
{
this.name = "No name";
}
public Animal(string name)
{
this.name = name;
}
public Animal(string name,int x)
{
this.name = "second";
}
}
Animal animal = new Animal();
void Start()
{
Debug.Log(animal.name);
}
=> No name 출력
Animal animal = new Animal("Lion");
void Start()
{
Debug.Log(animal.name);
}
=> Lion 출력
| 오버라이딩
오버라이딩은 오버로딩과 다르게 부모클래스의 메소드를 자식클래스의 메소드가 덮어 쓰는 방식이다. 예제를 확인해보자.
class Animal
{
public void sleep()
{
Debug.Log("동물이 자다");
}
}
class Monkey : Animal
{
public void sleep()
{
Debug.Log("원숭이가 자다");
}
}
public class TestScript : MonoBehaviour
{
Monkey monkey = new Monkey();
void Start()
{
monkey.sleep();
}
}
이러면 출력은 "원숭이가 자다" 가 된다.
부모 클래스 Animal을 상속받은 것이다.
| virtual과 override
이 때 누가 부모클래스이고 자식클래스인지 손쉽게 확인하는 방법이 있다. 바로 virtual과 override를 사용하는 것인데,
코드를 살펴보기 전에 virtual의 의미를 보자. virtual은 '가상의','허상의'라는 뜻이다. 즉 실제로 쓰이기 보다는 재정의 하기 전에 힌트같은 의미이다. 따라서 상속을 많이 시킬 클래스(부모클래스가 될 클래스)에 virtual를 붙이는 습관을 들이는 것도괜찮은 방법이다
class Animal
{
public virtual void sleep()
{
Debug.Log("동물이 자다");
}
}
class Monkey : Animal
{
public override void sleep()
{
Debug.Log("원숭이가 자다");
}
}
이런식으로 부모클래스에는 virtual을 쓰고 자식클래스에는 override를 쓰면 클래스를 딱 봤을떄 누가 부모클래스고 누가 자식 클래스인지 한 눈에 파악할 수 있다. 그리고 virtual을 사용하면 자식클래스에서 override까지 쓰면 자동완성 기능으로 함수가 나온다.
| base함수
base함수는 부모클래스의 메소드를 그대로 사용하는 방법이다.
class Animal
{
public virtual void sleep()
{
Debug.Log("동물이 자다");
}
}
class Monkey : Animal
{
public override void sleep()
{
base.sleep();
}
}
public class TestScript : MonoBehaviour
{
Monkey monkey = new Monkey();
void Start()
{
monkey.sleep();
}
}
이렇게 작성하면 "동물이 자다"가 출력이된다. 여기서 팁으로 override까지쓰고 자동완성 기능을 하면 base가 알아서 생성된다.
'C#_ Unity Game programming' 카테고리의 다른 글
Unity, MVC와 MVP패턴의 차이점 및 실습 코드 (0) | 2024.01.05 |
---|---|
Unity, Scriptable Object개념 (1) | 2024.01.04 |
C# 인터페이스와 추상클래스 공통점과 차이점 (2) | 2024.01.02 |
C# 다형성과 업캐스팅 및 다운캐스팅 (0) | 2024.01.02 |
C# 클래스 다형성 overide,virtual (1) | 2024.01.01 |