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둜 ν†΅μΌν•˜μ—¬ 각각의 νƒ€μž…λ³„λ‘œ μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆκ²Œλœλ‹€.

 

 

 πŸŒŸ κ²°λ‘ 

 λ‹€ν˜•성을 톡해 μˆ˜λ§Œμ€ νƒ€μž…λ“€μ„ ν•˜λ‚˜μ˜ κ³΅ν†΅λœ 객체둜 묢음으둜써 μ½”λ“œλ₯Ό 쀄여주고 μœ μ§€λ³΄μˆ˜μ„±μ΄ μ¦κ°€ν•˜μ—¬ λ”γ…‡μš± 효율적인 개발이 κ°€λŠ₯ν•˜λ‹€.