์ž๋ฐ”์˜ ์ •์„ - ๋‹คํ˜•์„ฑ(Polymorphism)

๋ธ”๋กœ๊ทธ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค! ๐Ÿก’ integer.blog



์ž๋ฐ”์˜ ์ •์„(๋‚จ๊ถ์„ฑ ์ €) ํ•™์Šต๋‚ด์šฉ ์ •๋ฆฌ

1. ๋‹คํ˜•์„ฑ (Polymorphism)

  • Java์—์„œ๋Š” ํ•œ ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ.
  • ๋ถ€๋ชจํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์ž์‹ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ.
  • ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ๋ชจ๋“  ์ฐธ์กฐ๋ณ€์ˆ˜๋Š” null ๋˜๋Š” 4 byte์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

2. ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํ˜•๋ณ€ํ™˜

  • ๋ถ€๋ชจํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์ž์‹ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ = down-casting (ํ˜•๋ณ€ํ™˜ ์ƒ๋žต ๋ถˆ๊ฐ€)
  • ํ˜•๋ณ€ํ™˜์€ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํ˜•๋ณ€ํ™˜์€ ์ธ์Šคํ„ด์Šค์— ์•„๋ฌด ์˜ํ–ฅ ์—†๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ, ์ฐธ์กฐ๋ณ€์ˆ˜ ๊ฐ„์˜ ํƒ€์ž…๋งŒ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ ์ƒ์„ฑ๋  ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ์ง€ ๋ชปํ•˜์—ฌ ์ปดํŒŒ์ผ์€ ์„ฑ๊ณตํ•˜๋”๋ผ๋„ ์‹คํ–‰ ์‹œ ์—๋Ÿฌ(ClassCastException)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

3. instanceof ์—ฐ์‚ฐ์ž

  • ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ์‹ค์ œ ํƒ€์ž…์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด instanceof ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.(์ฃผ๋กœ ์กฐ๊ฑด๋ฌธ์— ์‚ฌ์šฉ)
  • instanceof๋ฅผ ์ด์šฉํ•œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋กœ true๋ฅผ ์–ป์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ๊ฒ€์‚ฌํ•œ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.
    void doWork(Car c) {
      if (c instanceof FireEngine){
          FireEngine fe = (FireEngine)c;
          fe.water();
          ...
      }else if ...
    }

4. ์ฐธ์กฐ๋ณ€์ˆ˜์™€ ์ธ์Šคํ„ด์Šค์˜ ์—ฐ๊ฒฐ

  • static ๋ฉ”์†Œ๋“œ๋Š” static ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํƒ€์ž…์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํƒ€์ž…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ๋ฟ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ static ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์ด๋ฆ„.๋ฉ”์†Œ๋“œ()๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

5. ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋‹ค๋ฃจ๊ธฐ

  • ๋ถ€๋ชจํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ณตํ†ต์˜ ์กฐ์ƒ์„ ๊ฐ€์ง„ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.
  • Vectorํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Objectํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ์ด ๋ฐฐ์—ด์— ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    public class Vector extends AbstractList
                  implements List, Cloneable, java.io.Serializable  {
        protected Object elementData[];
        ...
    }
  • Vectorํด๋ž˜์Šค๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์•Œ์•„์„œ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅํ•  ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • Vectorํด๋ž˜์Šค๋Š” ๋‹จ์ง€ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฐฐ์—ด์ผ ๋ฟ์ด๋‹ค.
    • Vector item = new Vector();