[Java] ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ์ƒ์† (Inheritance)

JTIยท2022๋…„ 10์›” 27์ผ
0

โ˜•๏ธย  Java

๋ชฉ๋ก ๋ณด๊ธฐ
13/59
post-thumbnail

โœ”๏ธ ๊ฐ์ฒด์ง€ํ–ฅ์„ ํ†ตํ•ด์„œ ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ ์ค‘์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ = ์žฌํ™œ์šฉ์„ฑ
โœ”๏ธ ์ƒ์†์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”์‹œํ‚จ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•

๐Ÿ’ก ์ƒ์†์ด๋ž€?


โœ”๏ธ ๊ธฐ์กด์˜ ํด๋ž˜์Šค์—์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ

  • ๊ธฐ์กด์˜ ํด๋ž˜์Šค โžก๏ธ ๋ถ€๋ชจํด๋ž˜์Šค = ์ƒ์œ„ํด๋ž˜์Šค (0)
  • ์ƒˆ๋กœ์šด ํด๋ž˜์Šค โžก๏ธ ์ž์‹ํด๋ž˜์Šค = ํ•˜์œ„ํด๋ž˜์Šค ((0 +) โ˜…)

1. ๋ถ€๋ชจ์™€ ์ฐจ๋ณ„ํ™”๋˜๋Š” ์ž์‹๋งŒ์˜ ๊ณ ์œ ํ•œ ๋ญ”๊ฐ€๊ฐ€ ์žˆ์–ด์•ผํ•จ.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”์„œ๋“œ๋‚˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜, ์ƒ์„ฑ์ž๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค.
    ์ฆ‰, ๋ถ€๋ชจ๊ฐ€ ํ–ˆ๋˜ ์ผ ๋ง๊ณ  ์ž์‹ํด๋ž˜์Šค์—๋Š” ๋‹ค๋ฅธ ์ผ์„ ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๊ณตํ†ต๋œ ํŠน์ง•์ด ์•„๋‹Œ ๊ทธ ๊ณ ์œ ์˜ ์„ฑ์ง์„ ๊ฐ€์ง„ +a. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๋„ฃ์ž!

2. ์ƒ์†์˜ ๊ด€๊ณ„๋ฅผ is -a ์„ฑ๋ฆฝํ•ด์•ผํ•œ๋‹ค.

  • ๊ฐ€์ˆ˜๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๊ณ  ๊ทธ ๋ฐ‘์— ์•„์ด์œ ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.
    ์•„์ด์œ ๋Š” ํ•˜์œ„๊ฐœ๋…์„ ๋œปํ•˜๊ณ  ๊ฐ€์ˆ˜๋Š” ์ƒ์œ„๊ฐœ๋…์ด๋‹ค.
    ์ฆ‰, ์•„์ด์œ  is a ๊ฐ€์ˆ˜. ์ด๋Ÿฐ์‹์œผ๋กœ ์„ฑ๋ฆฝ์ด ๋ผ์•ผํ•œ๋‹ค.

  • ๊ฐœ๋…์ƒ ๊ฐ™์€ ๋งฅ๋ฝ์— ์žˆ์–ด์•ผํ•œ๋‹ค.

  • ๊ฑฐ์ง“์ด ๋˜๋Š” ๊ฒƒ์„ ์ƒํ•˜๊ด€๊ณ„๋กœ ๋ฌถ์œผ๋ฉด ์•ˆ๋œ๋‹ค.
    ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋‘˜๋‹ค ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค.

โœ๏ธ ์ƒ์† ์˜ˆ์‹œ(1)

class Car {
	int speed; // ์†๋„
	  
	public void setSpeed(int speed) { // ์†๋„ ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ
		this.speed = speed;
	}
}

class ElectricCar extends Car {
	int battery;

	public void charge(int amount) { // ์ถฉ์ „ ๋ฉ”์„œ๋“œ
		battery += amount;
	}
}

ElectricCar๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์ธ Car์—๊ฒŒ ์ƒ์†๋ฐ›์•˜๋‹ค.
๊ทธ๋ž˜์„œ Car๋ผ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์žˆ์–ด์•ผ ElectricCar๊ฐ€ ์„ฑ๋ฆฝํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์ƒ์† ์˜ˆ์‹œ(2)

class Hero {
	public Hero() {
		System.out.println("Hero ์ƒ์„ฑ์ž");
	}
}
class SuperHero extends Hero {
	public SuperHero() {
		System.out.println("SuperHero์˜ ์ƒ์„ฑ์ž");
	}
}

public class Main {
	public static void main(String[] args) {
		SuperHero s = new SuperHero();
	}

}
[๊ฒฐ๊ณผ๊ฐ’]
Hero ์ƒ์„ฑ์ž
SuperHero์˜ ์ƒ์„ฑ์ž

โ—๏ธ ๊ตฌ์ฒดํ™”์™€ ์ผ๋ฐ˜ํ™”์˜ ๊ด€๊ณ„

์ž์‹ํด๋ž˜์Šค ์ผ ์ˆ˜๋ก ๊ตฌ์ฒดํ™”๋˜๊ณ , ๋ถ€๋ชจ ํด๋ž˜์Šค ์ผ ์ˆ˜๋ก ์ถ”์ƒ์ ์ธ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜ํ™” ๋œ๋‹ค.

๐Ÿ’ก ์ƒ์†์˜ ์žฅ์  / ๋‹จ์ 


  • ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ณตํ†ต ๋ถ€๋ถ„์€ ํ•˜๋‚˜๋กœ ์ •๋ฆฌ๋˜์–ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ณ , ์œ ์ง€ ๋ณด์ˆ˜์™€ ๋ณ€๊ฒฝ์ด ์‰ฌ์›Œ์กŒ๋‹ค.
    : ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ์˜์กด์„ฑ์ด ๊ต‰์žฅํžˆ ๋†’์€ ๊ธฐ์ˆ ์ด๋‹ค.
    ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๊ด€๊ณ„๋“ค ๋ณด๋‹ค ์˜์กด์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ๋งŒ ๋ฐ”๊ฟ”๋„ ๋‹ค ๋ฐ”๊ปด์ง€๋Š” ๊ทธ๋Ÿฐ ์œ„ํ—˜์„ฑ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜์กด์„ฑ์€ ๋†’์œผ๋ฉด ๋†’์„ ์ˆ˜๋ก ์ข‹์ง€์•Š๋‹ค.
    ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๋Œ€๊ฒŒ ์ข‹์€ ์ ๋„ ์žˆ์ง€๋งŒ ์•ˆ์ข‹์€ ์ ๋„ ์žˆ๋‹ค.

โ—๏ธ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค์˜ ๊ด€๊ณ„๋ฅผ ์ƒ์œ„(super) ํด๋ž˜์Šค์™€ ํ•˜์œ„(sub) ํด๋ž˜์Šค๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋˜ํ•œ ๊ธฐ์ดˆ ํด๋ž˜์Šค(base class), ์œ ๋„ ํด๋ž˜์Šค(derived class)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

โŒ ๋‹ค์ค‘ ์ƒ์†์€ Java์—์„œ ๊ธˆ์ง€

โœ๏ธ ๊ณ„์‚ฐ๊ธฐ ์ƒ์†์„ ๋งŒ๋“ค์–ด๋ณด์ž

// ์ƒ์†์˜ˆ์‹œ
class Calculator {
    int left;
    int right;
 
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}
// ๋นผ๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
class SubstractionableCalculator extends Calculator {
    public void substract() {
        System.out.println(this.left - this.right);
    }
}
// ๊ณฑํ•˜๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
class MultiplicationableCalculator extends Calculator {
	public void multiplication() {
		System.out.println(this.left * this.right);
	}
}
// ๊ณฑํ•˜๊ธฐ ๊ธฐ๋Šฅ ๋‚ด์— ๋‚˜๋ˆ„๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
class DivisionableCalculator extends MultiplicationableCalculator {
	public void division() {
		System.out.println(this.left / this.right);
	}
}
 
public class CalculatorDemo1 {
 
    public static void main(String[] args) {
 
        
    	MultiplicationableCalculator c1 = new MultiplicationableCalculator(); 
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        c1.multiplication();
    }
 
}

๐Ÿ’ก ์˜ค๋ฒ„๋ผ์ด๋“œ (override)

  • ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž์‹ํด๋ž˜์Šค๊ฐ€ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ๋˜๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Method Overriding)์ด๋ผ๊ณ  ํ•œ๋‹ค. (โ€ป ๋ฉ”์†Œ๋“œ ๋ฎ์–ด์“ฐ๊ธฐ)
class Mother {
	public void eat() {
		//์—„๋งˆ๋Š” ์˜ค๋ฅธ์†์žก์ด๋‹ค
		System.out.println("์˜ค๋ฅธ์†์œผ๋ฃจ ๋ฐฅ๋จน๋Š”๋‹ค");
	}
	
}
class Daughter extends Mother {
	//๋”ธ์€ ์–‘์†์žก์ด์ด๋‹ค.
	public void eat() {
		System.out.println("์™ผ์†์œผ๋กœ ๋ฐฅ๋จน๋Š”๋‹ค.");
	}
}

public class Test { // ์˜ค๋ฒ„๋ผ์ด๋“œ

	public static void main(String[] args) {
		Daughter d = new Daughter();
		d.eat();
	}

}

๐Ÿ’ก์ƒ์†์„ ๊ธˆ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•. final

public final class String
	implements java.io.Serializable ...

//String ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋ฉด ์—๋Ÿฌ
public class LimitString extends String { // ์—๋Ÿฌ
}

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ง‰๋Š” ์ผ€์ด์Šค๋Š” ์—†๋Š”๋ฐ ๋ง‰์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๐Ÿ“Œ ๋งˆ์ง€๋ง‰ ์ •๋ฆฌ

โœ”๏ธ ์ƒ์†์˜ ๊ธฐ์ดˆ

  • extends๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ดˆ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋Š” ์ž๋™์ ์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค์— ์ƒ์†๋˜๋ฏ€๋กœ, ์ž์‹ ํด๋ž˜์Šค์—๋Š” ์ถ”๊ฐ€ ๋œ ๋ถ€๋ถ„๋งŒ ๊ธฐ์ˆ ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ž‘์„ฑ ํ•  ๊ฒฝ์šฐ ์ด๊ฒƒ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
  • final๋ฅผ ๋ถ™์ธ ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๋˜์ง€์•Š๊ณ , final์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์˜ฌ๋ฐ”๋ฅธ ์ƒ์†์ด๋ž€ "์ž์‹ ํด๋ž˜์Šค is-a ๋ถ€๋ชจ ํด๋ž˜์Šค"
  • ์ƒ์†์—๋Š” "์ถ”์ƒ์ , ๊ตฌ์ฒด์ " ๊ด€๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ •์˜ํ•˜๋Š” ์—ญํ• ๋„ ์žˆ์Œ

โœ”๏ธ ์ธ์Šคํ„ด์Šค

  • ์ธ์Šคํ„ด์Šค๋Š” ๋‚ด๋ถ€์— ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋‹ค์ค‘๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋ณด๋‹ค ์ž์‹ ํด๋ž˜์Šค์— ์†ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • ์ž์‹ ํด๋ž˜์Šค์— ์†ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” super์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ์ƒ์„ฑ์ž ๋™์ž‘

  • ๋‹ค์ค‘๊ตฌ์กฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, JVM๋Š” ์ž๋™์ ์œผ๋กœ ๊ฐ€์žฅ ์™ธ์ธก ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๋ชจ๋“  ์ƒ์„ฑ์ž๋Š” "๋ถ€๋ชจ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž"๋ฅผ ํ˜ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
  • ์ƒ์„ฑ์ž์˜ ์„ ๋‘์— super()๊ฐ€ ์—†์œผ๋ฉด, ์•”๋ฌต์ ์ธ "super();"๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
profile
Fill in my own colorful colors๐ŸŽจ

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