- Today
- Total
프로그래밍 농장
Base에 대하여 [Unity] 본문
Base 란, 기본적으로 해당 키워드를 사용하는 클래스의 부모 클래스를 가리키는 것이다.
아래와 같은 코드가 있다고 가정해보자 .
class Fruit {
string g_name;
int g_grade;
int g_price;
public Fruit(string name, int grade, int price) {
g_name = name;
g_grade = grade;
g_price = price;
}
public void Sell() {
Console.WriteLine("과일 {0}을(를) {1}원에 팔았습니다.", g_name, g_price);
}
public void Info() {
Console.WriteLine("과일 이름: {0}", g_name);
Console.WriteLine("과일 등급: {0}등급", g_grade);
Console.WriteLine("과일 가격: {0}원", g_price); }
public int Price {
get { return g_price; }
}
public int Grade {
get { return g_grade; }
}
public string Name {
get { return g_name; }
}}
위 코드에는 Friut 클래스가 선언되어 있다.
Sell, Info 메서드가 정의되어 있고, String, Grade,Price 속성이 정의되어 있다.
이제 base 키워드를 사용하는 예제를 보기 위해 Fruit 클래스를 상속하는 Apple 클래스를 선언해보자 .
class Apple : Fruit {
public Apple(int grade, int price) : base("사과", grade, price) {
} public void SellCustom() {
Console.WriteLine("사과를 {0}원에 팔았습니다.", Price);
} public void SellBase() {
base.Sell();
} public int Price {
get { return 0; }
}}
Apple 클래스에서는 SellBase 및 SellCustom 메서드가 정의되었고, Fruit 클래스의 Price 속성과 같은 이름을 가진 속성이 정의되어있다.
이때 base 키워드는 아주 유용하게 사용될 수 있다.
base 키워드를 사용한 것과 사용하지 않은 것으로 Apple 클래스의 Price를 접근하는지, Fruit클래스의 Price를 접근하는지가 달라지기 때문이다.
그 이유는 base 키워드의 정의에 있다.
"해당 키워드를 사용하는 클래스의 부모 클래스를 가리키는 것"
그렇다면 base를 사용한다면 Apple 클래스의 Price가 아닌 Fruit클래스의 Price에 접근하게 된다.
int priceBase = base.Price; // Fruit 클래스의 Price 속성 값
int priceThis = this.Price; // Apple 클래스의 Price 속성 값 (this. 는 생략 가능합니다)
그리고 생성자 부분을 보도록 하자.
public Apple(int grade, int price) : base("사과", grade, price) { }
생성자 본문이 비어있다.
생성자 매개변수 뒷부분에 코드를 보자 .
" : base("사과", grade, price) { } "
이 부분은 Apple 클래스를 생성할 때 Apple의 부모 클래스인 Fruit 클래스의 생성자를 호출하여 값을 초기화한다는 의미이다.
위의 예제에서는 생성자 본문이 비워져있지만, 생성자 본문을 비우지 않을 경우엔 base 클래스의 생성자를 호출한 후 해당 클래스의 생성자 본문을 실행하게 된다.
호출 순서는 아래와 같다.
1. Apple 클래스의 새 개체를 생성함 (Instance 를 만든다고 하죠)
2. Apple 클래스의 생성자를 호출.....하다가 : base 를 발견합니다.
3. Fruit 클래스의 생성자를 호출합니다.
4. Apple 클래스의 생성자 본문을 실행합니다.
5. Apple 클래스의 새 개체가 생성됩니다.
base 키워드의 특징
1. 정적(static) 클래스 또는 정적으로 선언된 속성, 메서드 또는 생성자에서는 base 키워드를 사용할 수 없다.
2. 여러 단계에 걸쳐 상속된 클래스인 경우, 상속된 모든 클래스의 필드, 속성, 메서드 등에 접근이 가능하다.
3. 생성자에서 base 키워드를 사용하여 부모 클래스의 생성자를 호출할 수 있다.
4. base.GetType() 메서드를 호출해도 부모 클래스의 형식을 반환하지는 않는다.
5. base 키워드는 "키워드" 다. 필드나 멤버 따위가 아니다
Reference
'Unity' 카테고리의 다른 글
Cinemachine [Unity] (0) | 2022.09.28 |
---|---|
Cinemachine - 벽뚫기방지 및 시네머신 교체원리 [ Unity ] (0) | 2022.09.28 |
쉐이더그래프 [ Unity ] (0) | 2022.09.26 |
코루틴에 대한 간단한 정리 (0) | 2022.09.26 |
씬 전환할 때 라이트가 어두워지는 문제 해결 방법 (0) | 2022.09.23 |