프로그래밍 농장

Base에 대하여 [Unity] 본문

Unity

Base에 대하여 [Unity]

Tennessee201 2022. 9. 27.
728x90

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

 

base 키워드를 알아보자

안녕하세요! 정말 오랜만의 글입니다! 이 글에서는 C#의 base 키워드에 대해서 알아보려고 합니다. base 키워드 해당 키워드를 사용하는 클래스의 부모 클래스를 가리키는 것 일단, 코드를 보시겠

slaner.tistory.com

728x90