Java

[Java] ๋‹คํ˜•์„ฑ์ด ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ• ๊นŒ?

joheamin 2025. 3. 26. 17:11

๐Ÿ”ด ๋‹คํ˜•์„ฑ

๋‹คํ˜•์„ฑ์ด๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๐Ÿ” ์˜ˆ๋ฅผ ๋“ค์–ด

โ—พ Animal ํด๋ž˜์Šค
abstract public class Animal {
	 String kind;

	 void breath() {
		 System.out.printf("%s๋Š” ์ˆจ์„ ์‰ฝ๋‹ˆ๋‹ค.\n",kind);
	 }
	 abstract void sound();

๐Ÿ‘‰ Animal์€ ์ถ”์ƒํด๋ž˜์Šค๋กœ ์ง€์ •ํ•œ๋‹ค.


โ—พ Cat ํด๋ž˜์Šค / Dog ํด๋ž˜์Šค

//Cat
class Cat extends Animal{
	//๊ธฐ๋ณธ์ƒ์„ฑ์ž
	Cat(){super.kind = "๊ณ ์–‘์ด";}
    
    //์˜ค๋ฒ„๋ผ์ด๋”ฉ
	@Override
	void sound() {
		System.out.println("์•ผ์˜น");
	}
    
    //Cat๋งŒ์˜ ๋ฉ”์„œ๋“œ
	void eyeColor() {
		System.out.println("~eyeColor๊ฐ€ ๋ฉ‹์ง€๋‹ค.");
	}
}
class Dog extends Animal{
	//๊ธฐ๋ณธ์ƒ์„ฑ์ž
	Dog(){
		super.kind = "๊ฐ•์•„์ง€";
		System.out.println("Dog ๊ธฐ๋ณธ์ƒ์„ฑ์ž");
	}
	
    //์˜ค๋ฒ„๋ผ์ด๋”ฉ
	@Override
	void sound() {
		System.out.println("๋ฉ๋ฉ");
	}
	//Dog ๋งŒ์˜ ๋ฉ”์„œ๋“œ
	void speed() {
		System.out.println("๊ฐ•์•„์ง€๋Š” ์ž˜ ๋‹ฌ๋ฆฐ๋‹ค.");
	}
}

 

 

Animal์„ ์ƒ์† ๋ฐ›๋Š” Cat๊ณผ Dog๊ฐ€ ์žˆ๋‹ค.

 

์ด๋•Œ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด๋ณธ๋‹ค.

 

โ—พ ์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šคํ™”
Cat cat = new Cat();
Dog dog = new Dog();

โ—พ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ ์ธ์Šคํ„ด์Šคํ™”

Animal cat = new Cat();
Animal dog = new Dog();


๐Ÿ‘‰ Animal ๊ฐ์ฒดํƒ€์ž…์œผ๋กœ ํ†ต์ผํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ 

 

 

๐Ÿ”ท ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ์ถœ๋ ฅ

โ—พ ๋ฉ”์„œ๋“œ ์ถœ๋ ฅ
Animal cat = new Cat();
Animal dog = new Dog();

//Animal ์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
cat.breath();
cat.sound();
dog.breath();
dog.sound();

//Animal์€ ์—†๊ณ  ์ž์‹ ํด๋ž˜์Šค๋งŒ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋ถˆ๊ฐ€๋Šฅ
cat.eyeColor();
dog.speed();

 

 

 

๐Ÿค” ์ƒ์œ„ ํด๋ž˜์Šค์—๋งŒ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 

 

๐Ÿ”ท ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

 

1๏ธโƒฃ  ํƒ€์ž…๊ฐ„์˜ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โ—พ Dog ํƒ€์ž…์„ Cat ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
Animal animal = new Dog();
	animal.sound();
	
	//Cat์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜
	animal = new Cat();
	animal.sound();


๐Ÿ‘‰ ๋™์ผํ•œ ๊ฐ์ฒด์—์„œ ํƒ€์ž…๋งŒ ๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ๋‹ค. 
      ํƒ€์ž… ๊ฐ„์˜ ๋ณ€ํ™˜์ด ์ž์œ ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ์ฆ๊ฐ€


โ—พ ๋‹ค์šด ์บ์ŠคํŒ… ๊ฐ€๋Šฅ
Dog๋งŒ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ Cat ๊ฐ์ฒด๋กœ ์บ์ŠคํŒ… ํ•˜๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

Animal animal = new Cat();

Dog d = (Dog)animal;  //Animal์—์„œ Dog๋กœ ๋‹ค์šด ์บ์ŠคํŒ…
d.sound();

๐Ÿ‘‰ ๋”ฐ๋กœ Dog ๊ฐ์ฒด๋ฅผ new ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์บ์ŠคํŒ…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

 

2๏ธโƒฃ ๊ฐ์ฒด๊ฐ€ ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ

โ—พ ์‚ฌ์šฉ์•ˆํ•  ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ
//Cat ๋ฉ”์„œ๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
public static void animalUse(Cat cat) {
		cat.breath();
		cat.sound();
	}
	
//Dog ๋ฉ”์„œ๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
	public static void animalUse(Dog dog) {
		dog.breath();
		dog.sound();
	}โ€‹
๐Ÿ‘‰ Cat๊ณผ Dog์˜ ๊ฐ๊ฐ์˜ ํƒ€์ž…๋ณ„๋กœ ์˜ค๋ฒ„๋กœ๋”ฉํ•ด์„œ ๋งŒ๋“ ๋‹ค . ๋”ฐ๋ผ์„œ ํƒ€์ž… ๊ฐฏ์ˆ˜๋ณ„๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.

โ—พ ๋‹คํ˜•์„ฑ ์‚ฌ์šฉ

public static void animalUse(Animal animal) {
			animal.breath();
			animal.sound();
		}โ€‹

๐Ÿ‘‰ Animal ๋ฅผ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ Animal๋กœ ํ†ต์ผํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํƒ€์ž…๋ณ„๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

 

 

 ๐ŸŒŸ ๊ฒฐ๋ก 

 ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ์ˆ˜๋งŒ์€ ํƒ€์ž…๋“ค์„ ํ•˜๋‚˜์˜ ๊ณตํ†ต๋œ ๊ฐ์ฒด๋กœ ๋ฌถ์Œ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ฆ๊ฐ€ํ•˜์—ฌ ๋”ใ…‡์šฑ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.