πŸ’» 곡뢀 기둝/β˜• Java

Java | λ‹€ν˜•μ„±(Polymorphism)

  • -

객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜ 4가지 μ£Όμš” νŠΉμ„±

μΊ‘μŠν™”

좔상화

λ‹€ν˜•μ„±

상속

 

κ·Έ 쀑에 λ‹€ν˜•μ„±μ— λŒ€ν•΄μ„œ λ°°μ› λŠ”λ°,

사싀 μ œλŒ€λ‘œ μ΄ν•΄ν•˜μ§€ μ•Šκ³  μ­‰ 흝고 λ„˜μ–΄κ°”λ‹€.

 

그리고 λ‹€μ‹œ 기둝으둜 λ‚¨κΈ°κ³ μž λ‹€μ‹œ 보고 μžˆλŠ”λ°,

κ·Έλž˜λ„ 이해가 λ˜μ§€ μ•Šμ•˜λ‹€.

 

유투브둜 ν•΄λ‹Ή κ΄€λ ¨ν•œ μ˜μƒμ„ μ°Ύμ•„λ³΄λ©΄μ„œ μ΄ν•΄ν–ˆλŠ”λ°,

λ…Έλ§ˆλ“œ 코더 μ±„λ„μ—μ„œ μ—…λ‘œλ“œν•œ '개발자 μ „κ³΅ν•„μˆ˜? 객체지ν–₯ κ°œλ…μ •λ¦¬ 10λΆ„μ»·' μ˜μƒμœΌλ‘œ κ°ˆν”Όλ₯Ό μž‘μ„ 수 μžˆμ—ˆλ‹€.

λ„ˆλ¬΄ μœ μ΅ν•œ μ˜μƒμ΄λ‹ˆ μΆ”μ²œν•œλ‹€.

[μ˜μƒμΆ”μ²œ : κ°œλ°œμž μ „κ³΅ν•„μˆ˜? 객체지ν–₯ κ°œλ…μ •λ¦¬ 10λΆ„μ»·]

 

 

 

그럼..

 

 

좜처 : 카톑 이λͺ¨ν‹°μ½˜ 농담곰

 

 


 

[좜처 : μ ν”„ 투 μžλ°”]

 

λ‹€ν˜•μ„±(Polymorphism)

μ—¬λŸ¬ ν˜•νƒœλ₯Ό 받아듀일 수 μžˆλŠ” μ„±μ§ˆ, 상황에 따라 의미λ₯Ό λ‹€λ₯΄κ²Œ λΆ€μ—¬ν•  수 μžˆλŠ” νŠΉμ„± λ“± ν•˜λ‚˜μ˜ νƒ€μž…μ— μ—¬λŸ¬ 객체λ₯Ό λŒ€μž…ν•  수 μžˆλŠ” μ„±μ§ˆ.

 

λ‹€ν˜•μ„± 예제

Bouncer(경비원) 클래슀λ₯Ό μΆ”κ°€ν•œλ‹€.

interface Predator6 {
	(μƒλž΅)
}

class Animal6 {
	(μƒλž΅)
}

class Tiger6 extends Animal6 implements Predator6, Barkable6 {
	(μƒλž΅)
}

class Lion6 extends Animal6 implements Predator6, Barkable6 {
	(μƒλž΅)
}

class ZooKeeper6 {
	(μƒλž΅)
}

class Bouncer6 {
	void barkAnimal6(Animal6 animal6) {
        if(animal6 instanceof Tiger6) {
    	    System.out.println("μ–΄ν₯");
		} else if(animal6 instanceof Lion6) {
			System.out.println("으λ₯΄λ ");
		}
    }
}

public class A6_Polymorphism {
 	public staticvoid main(String[] args) {
		Tiger6 tiger = new Tiger6();
		Lion6 lion = new Lion6();

		// λ‹€ν–₯μ„±
		// μ˜ˆμ‹œ 1
		Bouncer6 bouncer6 = new Bouncer6();
		bouncer6.barkAnimal6(tiger);
		bouncer6.barkAnimal6(lion);
	}
}

경비원 ν΄λž˜μŠ€λŠ” 동물을 μ§–κ²Œν•˜μ—¬(barkAnimal) 건물을 μ§€ν‚€λŠ” 역할을 μ •μ˜ν•œλ‹€.

barkAnimal λ©”μ†Œλ“œλŠ” μž…λ ₯으둜 받은 animal 객체가 Tiger의 객체인 κ²½μš°μ—λŠ” "μ–΄ν₯" 을 좜λ ₯ν•˜κ³  Lion 객체인 κ²½μš°μ—λŠ” "으λ₯΄λ "을 좜λ ₯ν•œλ‹€.

instanceof λŠ” μ–΄λ–€ 객체가 νŠΉμ • 클래슀의 객체인지 쑰사할 λ•Œ μ‚¬μš©ν•œλ‹€.
'animal instanceof Tiger λŠ” animal κ°μ²΄λŠ” Tiger 클래슀둜 λ§Œλ“€μ–΄μ§„ 객체인가?' λ₯Ό λ¬»λŠ” 쑰건문

 

class Bouncer {
    void barkAnimal(Animal animal) {
      if (animal instanceof Tiger) {
            System.out.println("μ–΄ν₯");
        } else if (animal instanceof Lion) {
            System.out.println("으λ₯΄λ ");
        } else if (animal instanceof Crocodile) {
          System.out.println("쩝쩝");
        } else if (animal instanceof Leopard) {
          System.out.println("캬옹");
        }
    }
}

λ§Œμ•½ μœ‘μ‹λ™λ¬Όμ΄ λŠ˜μ–΄λ‚  경우 μœ„μ˜ μ½”λ“œμ²˜λŸΌ μœ‘μ‹λ™λ¬Όλ§ˆλ‹€ μ§–λŠ” λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•΄μ•Όν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ 생긴닀.

이런 κ²½μš°μ—μ„œλŠ” μ•žμ— μΈν„°νŽ˜μ΄μŠ€λ₯Ό 배운 λ‚΄μš©μ„ μ°Έκ³ ν•˜μ—¬ 해법을 찾을 수 μžˆλ‹€.

 

// λ‹€ν˜•μ„± μΈν„°νŽ˜μ΄μŠ€ 생성
interface Barkable6 {
	void bark6();
}
class Animal6 {
	(μƒλž΅)
}

class Tiger6 extends Animal6 implements Predator6, Barkable6 { // μΈν„°νŽ˜μ΄μŠ€ 상속
	// 콀마(,)λ₯Ό μ΄μš©ν•˜μ—¬ μ—¬λŸ¬κ°œλ₯Ό implements ν•  수 μžˆλ‹€.
	public String getFood6() {
		return "apple";
	}

	public void bark6() { // λ™λ¬Όμ˜ μ’…λ₯˜μ— λ”°λ₯Έ μ†Œλ¦¬ λ©”μ†Œλ“œ μΆ”κ°€
		System.out.println("μ–΄ν₯");
	}
}

class Lion6 extends Animal6 implements Predator6, Barkable6 {
	public String getFood6() {
		return "banana";
	}

	public void bark6() {
		System.out.println("으λ₯΄λ ");
	}
}
class ZooKeeper6 {
	(μƒλž΅)
}

class Bouncer6 {
	void barkAnimal6(Barkable6 animal6) { // Animal λŒ€μ‹  Barkable6을 μ‚¬μš©
		animal6.bark6();
	}
}

μœ‘μ‹λ™λ¬Όμ˜ 클래슀 뒀에 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ( , ) λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œ 연달아 μΆ”κ°€κ°€ κ°€λŠ₯ν•˜λ‹€.

Barkable μΈν„°νŽ˜μ΄μŠ€μ— 맞좰 μœ‘μ‹λ™λ¬Όμ€ bark() λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜κ³ , λ™λ¬Όμ˜ νŠΉμ„±μ— 맞게 μ§–λŠ” μ†Œλ¦¬λ₯Ό μ •μ˜ν•΄μ€€λ‹€.

이둜써 λ³΅μž‘ν•˜λ˜ 쑰건뢄기문도 사라지고 보기 νŽΈν•œ μ½”λ“œκ°€ μ™„μ„±λ˜μ—ˆλ‹€.

 

정리

λ‹€ν˜•μ„±μ€ ν•˜λ‚˜μ˜ νƒ€μž…μ— μ—¬λŸ¬ 객체λ₯Ό λŒ€μž…ν•  수 μžˆλŠ” μ„±μ§ˆμ΄κ³ , 이걸을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ—¬λŸ¬ 객체듀 쀑 곡톡 νŠΉμ„±μœΌλ‘œ νƒ€μž…μ„ μΆ”μƒν™”ν•˜κ³  그것을 상속(μΈν„°νŽ˜μ΄μŠ€λΌλ©΄ κ΅¬ν˜„)ν•΄μ•Όν•œλ‹€.

 

 

 


 

 

 

사싀 μ΄λ²ˆμ— λ°°μš°λŠ” 과정은 μ–΄λ–€ μ–Έμ–΄μ—μ„œλ“ μ§€ μ‹€μ‚¬μš©λ˜κ³  있고, ꡬ쑰와 νŠΉμ„±μ„ μ•Œμ•„λ‘”λ‹€λ©΄ μ΄ν•΄ν•˜λŠ”λ° 크게 도움을 받을 수 μžˆλ‹€κ³  ν•œλ‹€.

그만큼 객체지ν–₯μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 뢀뢄이고, μ—¬λŸ¬λ²ˆ λ³΄λ©΄μ„œ μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ§Œλ“€μ–΄μ•Όν•˜λŠ” 뢀뢄이닀.

 

μ΄λ²ˆμ— λ‹€ν˜•μ„±μ„ 배우게 λ˜λ©΄μ„œ 이해λ₯Ό 돕기 μœ„ν•΄ 유투브 μ˜μƒλ„ 찾아보고 λ‹€λ₯Έ λΈ”λ‘œκ·Έμ˜ 글도 찾아보고 ν–ˆλ˜ 과정이 κ°μ‚¬ν•˜λ‹€.

κ΄€λ ¨ μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μœ μ΅ν•œ 정보λ₯Ό 얻을 수 μžˆμ—ˆκ³ , μ•žμœΌλ‘œλ„ 계속 이런 μ‹μœΌλ‘œ 슀슀둜 μ°Ύμ•„ 곡뢀해 λ‚˜μ•„κ°€λŠ” 과정을 λ°Ÿλ„λ‘ ν•˜μž.

 

μ˜€κ³΅μ™„!

Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.