์ƒ์†(Inheritance)

Joy๐ŸŒฑยท2022๋…„ 12์›” 31์ผ
0

โ˜• Java

๋ชฉ๋ก ๋ณด๊ธฐ
24/40
post-thumbnail

๐Ÿ’โ€โ™€๏ธ ์ƒ์†(Inheritance)์ด๋ž€,
๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉค๋ฒ„๋ฅผ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›์•„ ์ž์‹ ์˜ ๋ฉค๋ฒ„์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๊ธฐ์ˆ 

  • ๋ฉค๋ฒ„ ์™ธ์— ํƒ€์ž… ๋˜ํ•œ ์ƒ์†๋จ (๋‹คํ˜•์„ฑ์˜ ํ† ๋Œ€)
  • ์ž๋ฐ”๋Š” ๋‹จ์ผ ์ƒ์†(ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ์„ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๊ฐ€์ง)๋งŒ ์ง€์›

๐Ÿ™‹โ€ ์ž ๊น ! ์ƒ์†์˜ ์žฅ๋‹จ์ ์€์š”?

  • ์žฅ์ 
    • ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑ ์‹œ ๊ธฐ์กด์— ์ž‘์„ฑ ๋œ ํด๋ž˜์Šค์˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ํด๋ž˜์Šค๊ฐ„ ๊ณ„์ธต ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜์–ด ๋‹คํ˜•์„ฑ ๋ฌธ๋ฒ•์˜ ํ† ๋Œ€๊ฐ€ ๋จ
  • ๋‹จ์ 
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์‹œ ์ž์‹ ํด๋ž˜์Šค์˜ ์ •์ƒ์ ์ธ ๋™์ž‘ ์œ ๋ฌด ์˜ˆ์ธก์ด ํž˜๋“ฆ
    • ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๋ณ€๊ฒฝ ์‹œ ์–ด๋ ค์›€์ด ๋”ฐ๋ฆ„
    • ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋ฌผ๋ ค๋ฐ›์€ ๊ธฐ๋Šฅ์ด ์ž์‹ ํด๋ž˜์Šค์—์„œ๋Š” ๋ฌด์˜๋ฏธ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์žฅ๋‹จ์ ์„ ๊ณ ๋ คํ•ด ๋ณผ ๋•Œ IS-A ๊ด€๊ณ„๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

๐Ÿ‘€ ์ƒ์†

โ—ผ Car Class (super ํด๋ž˜์Šค)

public class Car {
	
	// ์ž๋™์ฐจ์˜ ๋‹ฌ๋ฆฌ๋Š” ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ
	private boolean runningStatus;
	
	// ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
	public Car() {
		System.out.println("Car ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ...");
	}
	
	// ์ž๋™์ฐจ์˜ ๊ธฐ๋ณธ์ ์ธ ๋‹ฌ๋ฆฌ๋Š” ๊ธฐ๋Šฅ
	public void run() {
		runningStatus = true;
		System.out.println("์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
	}
	
	// ์ž๋™์ฐจ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฉˆ์ถ”๋Š” ๊ธฐ๋Šฅ
	public void stop() {
		runningStatus = false;
		System.out.println("์ž๋™์ฐจ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.");
	}
	
	// ์ž๋™์ฐจ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ ์„ ์šธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ
	public void soundHorn() {
		
		// ์ฃผํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ๋งŒ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ
		if(isRunning()) {
        >>> ์•„๋ž˜์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
			System.out.println("๋นต!๋นต!๋นต!");
		} else {
			System.out.println("์ฃผํ–‰ ์ค‘์ด ์•„๋‹Œ ์ƒํƒœ์—์„œ๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
		}
	}
//	private boolean isRunning() {
	>>> ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•˜์ง€ ๋ชป ํ•จ
	protected boolean isRunning() {
    >>> ์™ธ๋ถ€์—์„œ๋„ ์—ญ์‹œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ž์‹ ํด๋ž˜์Šค์—์„œ๋งŒํผ์€ ์‚ฌ์šฉ๊ฐ€๋Šฅ
		
        // ์ž๋™์ฐจ์˜ ์ฃผํ–‰ ์ค‘ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ
		return runningStatus;
	}
}

โ—ผ FireCar Class (sub ํด๋ž˜์Šค)

public class FireCar extends Car { >>> Car๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๊ธฐ

	// ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    public FireCar() {
		
		>>> ๋ชจ๋“  ์ƒ์„ฑ์ž๋Š” ๋งจ ์ฒซ ์ค„์— super();๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ,
		>>> ์ด๋Š” ๋ถ€๋ชจ์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ๋ฌธ
		>>> ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ์‹œ Car ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ...์ด ๋จผ์ € ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋ฉฐ 
        >>> ๋ช…์‹œ์ , ๋ฌต์‹œ์  ๋ชจ๋‘ ๊ฐ€๋Šฅ
		super();
		
		System.out.println("FireCar ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๋จ...");
	}
	
	// ์†Œ๋ฐฉ์ฐจ์˜ ๊ฒฝ์  ์†Œ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์œผ๋ฏ€๋กœ ์กฐ๊ธˆ ๋” ํ‚ค์›Œ๋ณด๊ธฐ
	>>> ๊ฒฝ์  ์†Œ๋ฆฌ๋ฅผ ๋‚ด๋Š” ์šฉ๋„์˜ ๋ฉ”์†Œ๋“œ ์„ ์–ธ๋ถ€๋Š” ๊ทธ๋Œ€๋กœ ๋‘๋˜ ์†Œ๋ฐฉ์ฐจ ์ชฝ์—์„œ ์žฌ์ •์˜
	>>> Override ์–ด๋…ธํ…Œ์ด์…˜ : ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์„ฑ๋ฆฝ ์š”๊ฑด์„ ์ฒดํฌํ•˜์—ฌ ์„ฑ๋ฆฝ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ
	@Override
	public void soundHorn() { 
    >>> ๋ฉ”์†Œ๋“œ๋ฅผ ์™„๋ฒฝํžˆ ๋˜‘๊ฐ™์ด ์ ์€ ๋’ค, ๋‚ด์šฉ์€ ๋ฐ”๊ฟˆ 
		
		>>> ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ์˜ ์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ private์ผ ๋•Œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ˜ธ์ถœ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ
		>>> protected๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒ์† ๊ด€๊ณ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ ๊ฐ€๋Šฅ
		if(isRunning()) {
			System.out.println("๋ฟŒ์•„์•„์•„์•„์•„์•„์•™!!!!!!");
		} else {
			System.out.println("์†Œ๋ฐฉ์ฐจ๊ฐ€ ์•ž์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ! ๋น„ํ‚ค์„ธ์š” !!");
		}
	}
	>>> ์ž์‹ ํด๋ž˜์Šค๋งŒ ๊ฐ€์ง€๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ (๋ฌผ ๋ฟŒ๋ฆฌ๋Š” ๊ธฐ๋Šฅ)
	public void sprayWater() {
		System.out.println("๋ถˆ๋‚œ ๊ณณ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ์„ ๋ฟŒ๋ฆฝ๋‹ˆ๋‹น! ===========ํ‘ธ์Š‰=========>>>>");
	}
}

๐Ÿ“Œ Ref.

* ํด๋ž˜์Šค ์„ ์–ธ๋ถ€์— extends Car๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด FireCar ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Car๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ฉค๋ฒ„๋ฅผ ์ƒ์† ๋ฐ›์Œ
  ํ•˜์ง€๋งŒ, ์ƒ์„ฑ์ž๋Š” ์ƒ์†๋ฐ›์ง€ ๋ชป ํ•œ๋‹ค. ๋˜ํ•œ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” private ๋ฉค๋ฒ„๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ
* ์ž๋ฐ”์—์„œ์˜ ์ƒ์†์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง„ ๋ฉค๋ฒ„๋ฅผ ์ž์‹์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋” ๋‚˜์•„๊ฐ€์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ™•์žฅ(extend)์˜ ๊ฐœ๋…์„ ๊ฐ€์ง
* ์ถ”๊ฐ€์ ์ธ ์ž์‹ ์˜ ๋ฉค๋ฒ„ ์ž‘์„ฑ ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ๋ฐ, ๋ฉ”์†Œ๋“œ ์žฌ์ •์˜(overriding)๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ด์šฉํ•ด์„œ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Œ

โ—ผ RacingCar Class (sub ํด๋ž˜์Šค)

public class RacingCar extends Car {
	
	// ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
	public RacingCar() {
		super();
        >>> ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฌต์‹œ์ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด์žˆ์Œ (๋ช…์‹œํ•ด๋„ ์ƒ๊ด€์—†์Œ)
		System.out.println("RacingCar ํด๋ž˜์Šค ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๋จ...");
	}
	
	@Override
	public void soundHorn() {
		System.out.println("๋ ˆ์ด์‹ฑ์นด๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์กฐ..์šฉ..)");
	}
	
	@Override
	public void run() {
		System.out.println("๋ ˆ์ด์‹ฑ์นด๊ฐ€ ์ „์†๋ ฅ์œผ๋กœ ์งˆ์ฃผํ•ฉ๋‹ˆ๋‹ค !!!!!!!!! ๋ถ€์•„์•„์•„์•™");
	}
	
}

โ—ผ Application Class

public class Application {

	public static void main(String[] args) {

		Car car = new Car();
		
		car.soundHorn(); >>> ์ž๋™์ฐจ๊ฐ€ ์ถœ๋ฐœํ•˜์ง€์•Š์•„์„œ ๊ฒฝ์ ์ด ์šธ๋ฆฌ์ง€ ์•Š์Œ
		car.run(); >>> ๋‹ฌ๋ฆผ
		car.soundHorn(); >>> ๋นต๋นต
		car.stop(); >>> ๋ฉˆ์ถค
		car.soundHorn(); >>> ์ž๋™์ฐจ๊ฐ€ ๋ฉˆ์ท„๊ธฐ๋•Œ๋ฌธ์— ๊ฒฝ์ ์ด ์šธ๋ฆฌ์ง€ ์•Š์Œ
        
		System.out.println();
		
        // Car๋ฅผ ์ƒ์† ๋ฐ›์€ FireCar ํƒ€์ž…์˜ ๊ฐ์ฒด ์ƒ์„ฑ
		FireCar fireCar = new FireCar();
		
		fireCar.soundHorn();
		fireCar.run();
		fireCar.soundHorn();
		fireCar.stop();
		fireCar.soundHorn();
		
		fireCar.sprayWater();
//		Car.sprayWater();
		>>> ์ž์‹ ํด๋ž˜์Šค์—๋งŒ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
		
		System.out.println();
		
         // Car๋ฅผ ์ƒ์† ๋ฐ›์€ RacingCar ํƒ€์ž…์˜ ๊ฐ์ฒด ์ƒ์„ฑ
		RacingCar racingCar = new RacingCar();
        
		racingCar.soundHorn();
		racingCar.run();
		racingCar.soundHorn();
		racingCar.stop();
		racingCar.soundHorn();
	}
}

๐Ÿ“Œ Ref.

* ์ƒ์†์€ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง„ ๋ฉค๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ™•์žฅ๊นŒ์ง€ ๊ฐ€๋Šฅ.
  ํ•˜์ง€๋งŒ car ์ธ์Šคํ„ด์Šค๋กœ๋Š” fireCar ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ง„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ. 
  ์ž์‹์€ ๋ถ€๋ชจ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•ด์„œ ์ž์‹ ์˜ ๋ฉค๋ฒ„์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

๐Ÿ’ป Mini Console

Car ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ...
์ฃผํ–‰ ์ค‘์ด ์•„๋‹Œ ์ƒํƒœ์—์„œ๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋นต!๋นต!๋นต!
์ž๋™์ฐจ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
์ฃผํ–‰ ์ค‘์ด ์•„๋‹Œ ์ƒํƒœ์—์„œ๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Car ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ...
FireCar ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๋จ...
์†Œ๋ฐฉ์ฐจ๊ฐ€ ์•ž์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ! ๋น„ํ‚ค์„ธ์š” !!
์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋ฟŒ์•„์•„์•„์•„์•„์•„์•™!!!!!!
์ž๋™์ฐจ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
์†Œ๋ฐฉ์ฐจ๊ฐ€ ์•ž์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ! ๋น„ํ‚ค์„ธ์š” !!
๋ถˆ๋‚œ ๊ณณ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ์„ ๋ฟŒ๋ฆฝ๋‹ˆ๋‹น! ===========ํ‘ธ์Š‰=========>>>>

Car ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ...
RacingCar ํด๋ž˜์Šค ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๋จ...
๋ ˆ์ด์‹ฑ์นด๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์กฐ..์šฉ..)
๋ ˆ์ด์‹ฑ์นด๊ฐ€ ์ „์†๋ ฅ์œผ๋กœ ์งˆ์ฃผํ•ฉ๋‹ˆ๋‹ค !!!!!!!!! ๋ถ€์•„์•„์•„์•™
๋ ˆ์ด์‹ฑ์นด๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์กฐ..์šฉ..)
์ž๋™์ฐจ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
๋ ˆ์ด์‹ฑ์นด๋Š” ๊ฒฝ์ ์„ ์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์กฐ..์šฉ..)

profile
Tiny little habits make me

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด