2024-08-28 15:03:49
λ°˜μ‘ν˜•

자 μ˜€λŠ˜μ€ μΊμŠ€νŒ…μ΄ κ΄€ν•΄μ„œ 곡뢀λ₯Ό ν•΄λ³΄μž.

 

μΊμŠ€νŒ…μ€ μžλ°”μ—μ„œ μƒλ‹Ήνžˆ μ€‘μš”ν•œ κ°œλ…μ΄λΌκ³  ν•  수 μžˆμœΌλ‹ˆ, 잘 μ•Œμ•„λ‘λŠ” 것이 μ’‹λ‹€.

 

μΊμŠ€νŒ…μ΄λž€?

--->

 

μΊμŠ€νŒ…μ€, 객체가 가지고 μžˆλŠ” νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜ ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

μΊμŠ€νŒ…μ—λŠ” ν˜•λ³€ν™˜κ³Ό 같이 두 κ°€μ§€λ‘œ λ³€ν™˜ 방법이 μ‘΄μž¬ν•˜λŠ”λ°,

 

1. κ°•μ œ ν˜•λ³€ν™˜(λͺ…μ‹œμ  ν˜•λ³€ν™˜) : κ°•μ œλ‘œ λ³€ν™˜ μ‹œν‚¬ ν˜•νƒœλ‘œ λͺ…μ‹œλ₯Ό ν•΄μ£ΌλŠ” 것인데, μ˜ˆμ‹œλŠ”

(ν•˜μœ„νƒ€μž…)μ—…μΊμŠ€νŒ…λœ ν•˜μœ„ νƒ€μž… 객체;   μ¦‰, μ΄λŠ” λ‹€μš΄μΊμŠ€νŒ…(down casting)을 μ‹œν‚¬λ•Œ μ‚¬μš©ν•œλ‹€.

 

 2. μžλ™ ν˜•λ³€ν™˜(λ¬΅μ‹œμ  ν˜•λ³€ν™˜) : μžλ£Œν˜•μ„ 직접 λͺ…μ‹œν•˜μ§€ μ•Šκ³ , μžλ™μ μœΌλ‘œ μΊμŠ€νŒ… λ˜λŠ” 것이닀.

μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€

(μƒμœ„νƒ€μž…)ν•˜μœ„νƒ€μž… 객체λͺ…;

μƒμœ„νƒ€μž…λͺ… λ³€μˆ˜λͺ… = ν•˜μœ„ νƒ€μž… κ°μ²΄λͺ…;
μƒμœ„νƒ€μž…λͺ… λ³€μˆ˜λͺ… = (μƒμœ„νƒ€μž…)ν•˜μœ„ νƒ€μž… κ°μ²΄λͺ…;
μƒμœ„νƒ€μž…λͺ… λ³€μˆ˜λͺ… = new μžμ‹ νƒ€μž… μƒμ„±μž();

 

μš°λ¦¬κ°€ μΊμŠ€νŒ…μ„ 이야기 ν•  λ•Œ, 주둜 up μΊμŠ€νŒ…κ³Ό down μΊμŠ€νŒ…μ„ μ΄μ•ΌκΈ°ν•œλ‹€.

κ·Έλ ‡λ‹€λ©΄ 이게 무슨 μ˜λ―ΈμΈμ§€ ν•œ 번 μ•Œμ•„λ³΄μž.

 

μš°μ„ , μ €μž₯곡간이 객체의 μƒμœ„νƒ€μž…μ΄λΌλ©΄ ν•΄λ‹Ή 객체가 μƒμœ„νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜ λ˜μ–΄μ•Όν•œλ‹€.

 

AλΌλŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ 있고, BλΌλŠ” ν΄λž˜μŠ€κ°€ μžμ‹ν΄λž˜μŠ€λΌκ³  ν•˜μž.

κ·Έλ ‡λ‹€λ©΄ Bν΄λž˜μŠ€λŠ” A클래슀λ₯Ό 상속받고 μžˆμ„ 것이닀.

μ΄λ•Œ, B ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έν•œ 객체가 A 클래슀(λΆ€λͺ¨)의 ν•„λ“œλ‚˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”

객체화λ₯Ό ν•΄μ•Όν•  것이닀. ν•˜μ§€λ§Œ B클래슀 내뢀에 μžˆλŠ” 객체가 μ•„λ‹ˆκ³  λΆ€λͺ¨μ˜ 정보λ₯Ό λ°›μ•„μ˜€λŠ” κ°μ²΄μ΄λ―€λ‘œ,

λ°”λ‘œ μ‚¬μš©ν•  수 μ—†κ³  ν˜•λ³€ν™˜μ„ 톡해 up μΊμŠ€νŒ…μ„ ν•΄μ•Όν•œλ‹€. κ·ΈλŸ¬κ³ λ‚˜μ„œ λΆ€λͺ¨ 클래슀의 ν•„λ“œλ‚˜ λ©”μ†Œλ“œλ₯Ό 

객체둜 λΆˆλŸ¬μ˜€λŠ” 것이닀.

 

down μΊμŠ€νŒ…μ€ λ°˜λŒ€λ‘œ λΆ€λͺ¨ 클래슀의 객체 생성을 ν•  λ•Œ, μžμ‹μ˜ 것을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ down ν•˜λŠ” 것이라고 생각

ν•  수 μžˆκ² μ§€λ§Œ μ „ν˜€ 그렇지 μ•Šκ³ , 였히렀 up μΊμŠ€νŒ…μœΌλ‘œ λ³€ν™˜λœ ν˜•μ„ λ‹€μ‹œ 원볡 μ‹œν‚€λŠ” 것이 down μΊμŠ€νŒ…μ΄λ‹€.

 

μ΄μœ λŠ”, μƒμ†μ˜ κ°œλ…μ„ μ•Œκ³  μžˆλ‹€λ©΄ μœ μΆ”ν•  수 μžˆλ“―μ΄, λΆ€λͺ¨μ˜ 것을 μžμ‹μ—κ²Œ μƒμ†μ‹œμΌ°λ‹€κ³  ν•΄μ„œ, λΆ€λͺ¨κ°€ μžμ‹μ˜ 것을

가지고 μžˆλŠ” 것이 μ•„λ‹Œ κ²ƒμ²˜λŸΌ, μΊμŠ€νŒ…λ„ λ§ˆμ°¬κ°€μ§€μ΄λ‹€. λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” μžμ‹ν΄λž˜μŠ€μ˜ νƒ€μž…κ³Ό 멀버λ₯Ό 가지지 μ•ŠκΈ°μ—,

μΊμŠ€νŒ…μ„ ν•˜λŠ” 것이 μ˜λ―Έκ°€ μ—†λŠ” 것이닀.

 

κ·Έλ ‡λ‹€λ©΄ μš°λ¦¬κ°€ casting을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” 크게 λ¬΄μ—‡μΌκΉŒ?

 

1. up casting : λ‹€μ–‘ν•œ νƒ€μž…을 ν•œλ²ˆμ— κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ
2. down casting : up casting된 μžμ‹μ—μ„œ μžμ‹ ν΄λž˜μŠ€μ˜ λ©€λ²„λ₯Ό
μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš° 

 

λ§ˆμ§€λ§‰μœΌλ‘œ 객체의 νƒ€μž…μ΄ μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄ instaceof λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€

객체의 νƒ€μž… ν™•μΈ(instanceof)

a instanceof A : a객체가 ν΄λž˜μŠ€ A의 νƒ€μž…을 κ°€μ§€λ©΄ true, μ•„λ‹ˆλΌλ©΄ false

이제 μ˜ˆμ‹œλ₯Ό 보자.

 

μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…μ„ μ‚¬μš©ν•˜λŠ” κ°€μž₯ 기본적인 μ˜ˆμ‹œλ₯Ό ν•˜λ‚˜ 가져와봀닀.

 

package casting;

public class Car {
	/*
	1. Car 클래슀 μ„ μ–Έ

	- ν•„λ“œ : μ°¨λŸ‰μ˜ 색상(color), 엔진 μƒνƒœ(engineState)
	- μƒμ„±μž : μ°¨λŸ‰μ˜ 색상을 전달받아 μ΄ˆκΈ°ν™”ν•œλ‹€. 엔진 μƒνƒœλŠ” 항상 꺼짐으둜 μ΄ˆκΈ°ν™”ν•œλ‹€
	- turnOn λ©”μ†Œλ“œ : μžλ™μ°¨ μ‹œλ™μ„ ν‚΅λ‹ˆλ‹€ λ₯Ό 좜λ ₯ ν›„ 엔진 μƒνƒœλ₯Ό 켜짐으둜 λ³€κ²½ν•œλ‹€
	- turnOff λ©”μ†Œλ“œ : μžλ™μ°¨ μ‹œλ™μ„ λ•λ‹ˆλ‹€ λ₯Ό 좜λ ₯ ν›„ 엔진 μƒνƒœλ₯Ό 꺼짐으둜 λ³€κ²½ν•œλ‹€
	- checkInfo λ©”μ†Œλ“œ : ν˜„μž¬ μ €μž₯λ˜μ–΄ μžˆλŠ” μ°¨λŸ‰μ˜ 색상과 μ°¨λŸ‰μ˜ μ—”μ§„μƒνƒœ ν•„λ“œλ₯Ό 좜λ ₯ν•œλ‹€
		-> 좜λ ₯ μ˜ˆμ‹œ :
			color = red
			engineState = true
 */
	
	// ν•„λ“œ(field)
	String color;
	boolean engineState;
	
	// μƒμ„±μž(constructor)
	Car(String color){
		this.color = color;
	}
	
	// λ©”μ†Œλ“œ(method)
	void turnOn() {
		System.out.println("μžλ™μ°¨ μ‹œλ™μ„ ν‚΅λ‹ˆλ‹€");
		engineState = true;
	}
	
	void turnOff() {
		System.out.println("μžλ™μ°¨ μ‹œλ™μ„ λ•λ‹ˆλ‹€");
		engineState = false;
	}
	
	void checkInfo() {
		System.out.println("color = " + color);
		System.out.println("engineState = " + engineState);
	}

	
}

μš°μ„  이 μ½”λ“œλŠ” λΆ€λͺ¨ 클래슀라고 ν•  수 μžˆλŠ” Car ν΄λž˜μŠ€μ΄λ‹€. λ©”μ†Œλ“œκ°€ 3개 μ •μ˜λ˜μ–΄μžˆκ³  ν•„λ“œμ—” 2개 μƒμ„±μžλŠ” 컬러λ₯Ό λ°›κ³ μžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€.

 

package casting;

public class DieselCar extends Car{
	
	/*
	 * DieselCar(){
	 * 		super();
	 * }
	 * 
	 * 
		2. Car 클래슀λ₯Ό μƒμ†λ°›λŠ” DieselCar 클래슀 μ„ μ–Έ

		- ν•„λ“œ : μ΅œλŒ€ μ£Όμœ λŸ‰(maxOil), ν˜„μž¬ μ£Όμœ λŸ‰(currentOil)
		- μƒμ„±μž : μ°¨λŸ‰μ˜ 색상, μ΅œλŒ€ μ£Όμœ λŸ‰μ„ 전달받아 μ΄ˆκΈ°ν™”ν•œλ‹€.
			단, 상속받은 ν•„λ“œλŠ” λΆ€λͺ¨ μƒμ„±μžλ₯Ό 톡해 μ΄ˆκΈ°ν™”ν•œλ‹€
			단, ν˜„μž¬ μ£Όμœ λŸ‰μ€ 항상 0으둜 μ΄ˆκΈ°ν™”ν•œλ‹€
		- fillUp λ©”μ†Œλ“œ : μ „λ‹¬ν•œ μ£Όμœ λŸ‰ 만큼 주유 ν›„(ν˜„μž¬ μ£Όμœ λŸ‰ λ³€κ²½) 주유 μ™„λ£Œ 좜λ ₯
			단, μ•„λž˜μ˜ κ²½μš°λŠ” 정상 주유λ₯Ό μ§„ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€
                      -> μ‹œλ™μ΄ μΌœμ ΈμžˆλŠ” 경우 : μ‹œλ™μ΄ μΌœμ§„ μƒνƒœμž…λ‹ˆλ‹€ 좜λ ₯
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰μ΄ 음수일 경우 : 잘λͺ»λœ μ£Όμœ λŸ‰ μž…λ‹ˆλ‹€ 좜λ ₯
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰μ΄ μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ²—μ–΄λ‚  경우 : μ΅œλŒ€ 주유 κ°€λŠ₯λŸ‰μ€ μ–Όλ§ˆ μž…λ‹ˆλ‹€ 좜λ ₯ν›„, μ΅œλŒ€ μ£Όμœ λŸ‰ 만큼만 주유
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰κ³Ό ν˜„μž¬ μ£Όμœ λŸ‰μ˜ 합이 μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ²—μ–΄λ‚  경우 : μ΅œλŒ€ 주유 κ°€λŠ₯λŸ‰μ€ μ–Όλ§ˆ μž…λ‹ˆλ‹€, μ΅œλŒ€ μ£Όμœ λŸ‰ 만큼만 주유
		- checkInfo λ©”μ†Œλ“œ : 상속받은 checkInfo λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μž¬μ •μ˜ν•œλ‹€(μ˜€λ²„λΌμ΄λ”©)
			상속받은 ν•„λ“œ 외에 직접 μ„ μ–Έν•œ ν˜„μž¬ μ£Όμœ λŸ‰κ³Ό μ΅œλŒ€ μ£Όμœ λŸ‰λ„ 좜λ ₯ν•œλ‹€
			-> 좜λ ₯ μ˜ˆμ‹œ :
				color = red
				engineState = true
				currentOil = 30
				maxOil = 50
	 */
	
	// ν•„λ“œ(field)
	int maxOil;
	int currentOil;
	
	// μƒμ„±μž(constructor)
	DieselCar(String color, int maxOil){
		// λΆ€λͺ¨μ—κ²Œ 상속받은 ν•„λ“œλŠ” λΆ€λͺ¨ μƒμ„±μžμ—κ²Œ 전달
		super(color);
		// μžμ‹μ—μ„œ μ„ μ–Έν•œ ν•„λ“œλŠ” μžμ‹μ—μ„œ μ΄ˆκΈ°ν™”
		this.maxOil = maxOil;
	}
	
	// λ©”μ†Œλ“œ(method)
	/*
	 * - fillUp λ©”μ†Œλ“œ : μ „λ‹¬ν•œ μ£Όμœ λŸ‰ 만큼 주유 ν›„(ν˜„μž¬ μ£Όμœ λŸ‰ λ³€κ²½) 주유 μ™„λ£Œ 좜λ ₯
			단, μ•„λž˜μ˜ κ²½μš°λŠ” 정상 주유λ₯Ό μ§„ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€
            -> μ‹œλ™μ΄ μΌœμ ΈμžˆλŠ” 경우 : μ‹œλ™μ΄ μΌœμ§„ μƒνƒœμž…λ‹ˆλ‹€ 좜λ ₯
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰μ΄ 음수일 경우 : 잘λͺ»λœ μ£Όμœ λŸ‰ μž…λ‹ˆλ‹€ 좜λ ₯
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰μ΄ μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ²—μ–΄λ‚  경우 : μ΅œλŒ€ 주유 κ°€λŠ₯λŸ‰μ€ μ–Όλ§ˆ μž…λ‹ˆλ‹€ 좜λ ₯ν›„, μ΅œλŒ€ μ£Όμœ λŸ‰ 만큼만 주유
			-> μ „λ‹¬ν•œ μ£Όμœ λŸ‰κ³Ό ν˜„μž¬ μ£Όμœ λŸ‰μ˜ 합이 μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ²—μ–΄λ‚  경우 : μ΅œλŒ€ 주유 κ°€λŠ₯λŸ‰μ€ μ–Όλ§ˆ μž…λ‹ˆλ‹€, μ΅œλŒ€ μ£Όμœ λŸ‰ 만큼만 주유
	 */
	void fillUp(int oilNum) {
		// 엔진이 켜져있으면 주유λ₯Ό ν•˜μ§€ λͺ»ν•œλ‹€
		// engineStateκ°€ true라면 μ£Όμœ ν•˜μ§€ λͺ»ν•œλ‹€
		if(engineState) {
			System.out.println("μ‹œλ™μ΄ μΌœμ§„ μƒνƒœμž…λ‹ˆλ‹€");
			// 엔진이 μΌœμ Έμžˆλ‹€λ©΄ λ©”μ†Œλ“œμ˜ 싀행을 μ’…λ£Œν•œλ‹€!
			return;
		}
		// ν¬λ§ν•˜λŠ” μ£Όμœ λŸ‰μ΄ 음수일 경우
		if(oilNum < 0) {
			System.out.println("잘λͺ»λœ μ£Όμœ λŸ‰ μž…λ‹ˆλ‹€");
		}else if(currentOil + oilNum >= maxOil) {
			// ν¬λ§ν•˜λŠ” μ£Όμœ λŸ‰μ΄ μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ„˜μ„κ²½μš°
			// ν¬λ§ν•˜λŠ” μ£Όμœ λŸ‰κ³Ό ν˜„μž¬ μ£Όμœ λŸ‰μ˜ 합계가 μ΅œλŒ€ μ£Όμœ λŸ‰μ„ λ„˜μ„κ²½μš°
			System.out.println("μ΅œλŒ€ 주유 κ°€λŠ₯λŸ‰μ€" + maxOil + " μž…λ‹ˆλ‹€");
			currentOil = maxOil;
		}else {
			// ν¬λ§ν•˜λŠ” μ£Όμœ λŸ‰, ν˜„μž¬ μ£Όμœ λŸ‰, μ΅œλŒ€ μ£Όμœ λŸ‰, 엔진 μƒνƒœκ°€ 정상일 경우
			currentOil += oilNum;
			System.out.println("주유 μ™„λ£Œ!");
		}
		
	}
	
	// 상속받은 checkInfo λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•œλ‹€ => λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©
	@Override
	void checkInfo() {
//		System.out.println("color = " + color);
//		System.out.println("engineState = " + engineState);
		super.checkInfo();
		System.out.println("maxOil = " + maxOil);
		System.out.println("currentOil = " + currentOil);
	}
	
	
	

}

이 ν΄λž˜μŠ€λŠ” μžμ‹ 클래슀둜 Car 클래슀λ₯Ό μƒμ†λ°›λŠ” Diesel Car ν΄λž˜μŠ€μ΄λ‹€.

package casting;

public class CastingTest {

	public static void main(String[] args) {

		DieselCar diesel1 = new DieselCar("red", 10);
		// up casting μ‚¬μš©
		// μƒμœ„νƒ€μž…λͺ… λ³€μˆ˜λͺ… = ν•˜μœ„ νƒ€μž… 객체λͺ…;
		// λΆ€λͺ¨νƒ€μž…λͺ… λ³€μˆ˜λͺ… = μžμ‹ 객체λͺ…;
		
		// λŒ€μž…μ—°μ‚°μžλŠ” 항상 μ™Όμͺ½ μ €μž₯곡간과 였λ₯Έμͺ½ κ°’μ˜ μžλ£Œν˜•μ„ μ²΄ν¬ν•œλ‹€
		// λ‹€λ₯Ό 경우 μžλ™ ν˜•λ³€ν™˜ ν• μˆ˜ 있으면 μžλ™ ν˜•λ³€ν™˜μ΄ μ§„ν–‰λœλ‹€
		Car castingObj = diesel1;
		Car castingObj2 = (Car)diesel1;
		
		// μ—…μΊμŠ€νŒ…λœ μžμ‹ κ°μ²΄λŠ” μžμ‹μ—μ„œ μ„ μ–Έν•œ λ©”μ†Œλ“œμ™€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•œλ‹€
//		castingObj.fillUp(20);
//		System.out.println(castingObj.maxOil);
//		System.out.println(castingObj.currentOil);
		// 단, μž¬μ •μ˜λœ λ©”μ†Œλ“œλŠ” μ—…μΊμŠ€νŒ…λœ μƒνƒœμ—μ„œ μ‚¬μš© κ°€λŠ₯
		castingObj.checkInfo();
		
		// down casting μ‚¬μš©
		// μžμ‹μ—μ„œ μ„ μ–Έν•œ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ‹€μ‹œ μžμ‹νƒ€μž…(ν•˜μœ„)으둜 ν˜•λ³€ν™˜ν•œλ‹€
		
		DieselCar dCastingObj = (DieselCar)castingObj;
		
		dCastingObj.turnOn();
		dCastingObj.fillUp(5);
		dCastingObj.checkInfo();
		
		// down castingν•œ 객체λ₯Ό λ³€μˆ˜μ— μ €μž₯ν•˜μ§€ μ•Šκ³  λ°”λ‘œ ν•„λ“œ λ˜λŠ” λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€
		((DieselCar)castingObj).fillUp(3);
		System.out.println(((DieselCar)castingObj).maxOil);
	
		
		
	}

}

메인 λ©”μ†Œλ“œκ°€ μ„ μ–Έλ˜μ–΄μžˆλŠ” μ½”λ“œμ΄λ‹€.

 

-->

μš°μ„  DieselCar ν΄λž˜μŠ€λŠ” Car 클래슀λ₯Ό 상속받고 μžˆλ‹€. checkInfo() λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μ΄ λ˜μ–΄μžˆλŠ” μƒνƒœμ΄λ―€λ‘œ

μΊμŠ€νŒ…μ΄ 된 μƒνƒœμΌμ§€λΌλ„ λ°”λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 점 μœ μ˜ν•˜μž.

 

사싀 μœ„μ˜ μ˜ˆμ‹œλŠ” λ””μ €μΉ΄μ˜ μ†μ„±λ§Œ λ”°μ Έλ³Ό 것이라면 μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…μ„ ꡳ이 ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ”κ±΄ 사싀이닀.

μ–΄μ°¨ν”Ό DielelCar ν΄λž˜μŠ€κ°€ Car클래슀의 λͺ¨λ“  것을 상속 λ°›κ³  있고 ν•„μš”ν•œ λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μœΌλ‘œ μž¬μ •μ˜κΉŒμ§€ ν–ˆμœΌλ‹ˆλ§μ΄λ‹€. ν•˜μ§€λ§Œ κ·ΈλŸΌμ—λ„ ν•΄λ³Έ 것은, μΊμŠ€νŒ…μ˜ λŠλ‚Œμ„ μ•Œμ•„λ³΄κΈ° μœ„ν•΄μ„œλ‹€.

 

μ΄λŠ” μΊμŠ€νŒ…μ˜ κ°€μž₯ 기본이라고 ν•  수 μžˆλ‹€.

 

*** μ˜€λŠ˜ casting ν•΅μ‹¬ ***

1. κ°μ²΄λŠ” μ—¬λŸ¬κ°œμ˜ μžλ£Œν˜•(νƒ€μž…)을 κ°€μ§„λ‹€
2. μžμ‹ν΄λž˜μŠ€λŠ” μƒμ†λ°›μ€ λΆ€λͺ¨ ν΄λž˜μŠ€μ˜ μžλ£Œν˜•(νƒ€μž…)을 κ°€μ§„λ‹€
3. κ°μ²΄λŠ” κ°€μ§€κ³  μžˆλŠ” μžλ£Œν˜•(νƒ€μž…)으둜 ν˜•λ³€ν™˜ κ°€λŠ₯ν•˜λ‹€
4. λΆ€λͺ¨ν΄λž˜μŠ€λŠ” μžμ‹ν΄λž˜μŠ€μ˜ μžλ£Œν˜•(νƒ€μž…)을 κ°€μ§€μ§€ μ•ŠλŠ”λ‹€!

 

728x90