โ ๋คํ์ฑ(Polymorphism)
๋คํ์ฑ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ํ๋ค. ์ด๋ฅผ ํตํด ์ ์ง ๋ณด์์ ํ์ฅ์ด ์ฉ์ดํ ์์คํ ์ ์ค๊ณํ ์ ์๋ค.
๋คํ์ฑ์ ๋ฐํ์ ๋คํ์ฑ(Run-time Polymorphism)๊ณผ ์ปดํ์ผ ํ์ ๋คํ์ฑ(Compile-time Polymorphism)์ผ๋ก ๋๋๋ค.
โ ๋ฐํ์ ๋คํ์ฑ
๋ฐํ์ ๋คํ์ฑ์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ํ๋ ๋คํ์ฑ์ ์๋ฏธํ๋ฉฐ, ๋์ ๋ฐ์ธ๋ฉ(Dynamic Binding) ๋๋ ์ง์ฐ ๋ฐ์ธ๋ฉ(Late Binding)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
C#์์ ๋ฐํ์ ๋คํ์ฑ์ ์ฃผ๋ก ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ๊ตฌํ๋๋ค.
- ์์
Animal myAnimal = new Dog(); // ๋ฐํ์ ์์ ์ Dog์ ๋ฉ์๋ ํธ์ถ
myAnimal.MakeSound(); // ์ถ๋ ฅ: "Dog barks"
myAnimal = new Cat(); // ๋ฐํ์ ์์ ์ Cat์ ๋ฉ์๋ ํธ์ถ
myAnimal.MakeSound(); // ์ถ๋ ฅ: "Cat meows"
→ Animal ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๊ฐ Dog๋ Cat ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ด, ๋์ผํ ๋ฉ์๋ ํธ์ถ์ด ๋ฐํ์์ ์๋ก ๋ค๋ฅธ ๋์์ ์ํํ๋ค.
โ ์ปดํ์ผ ํ์ ๋คํ์ฑ
์ปดํ์ผ ํ์ ๋คํ์ฑ์ ํ๋ก๊ทธ๋จ์ด ์ปดํ์ผ๋ ๋ ๊ฒฐ์ ๋๋ ๋คํ์ฑ์ ์๋ฏธํ๋ฉฐ, ์ ์ ๋ฐ์ธ๋ฉ(Static Binding) ๋๋ ์กฐ๊ธฐ ๋ฐ์ธ๋ฉ(Early Binding)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
C#์์ ์ปดํ์ผ ํ์ ๋คํ์ฑ์ ์ฃผ๋ก ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ํตํด ๊ตฌํ๋๋ค.
- ์์
Calculator calc = new Calculator();
Console.WriteLine(calc.Add(5, 10)); // ์ถ๋ ฅ: 15 (int)
Console.WriteLine(calc.Add(5.5, 10.5)); // ์ถ๋ ฅ: 16.0 (double)
→ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋ ์ค ํธ์ถ ๋ ๋ฉ์๋๋ ์ปดํ์ผ ํ์์ ์ด๋ฏธ ๊ฒฐ์ ๋๋ค.
'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5๊ฐ์ง ์์น (SOLID) (0) | 2024.08.23 |
|---|---|
| ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI) (0) | 2024.08.20 |
| ์ถ์ ํด๋์ค(Abstract Class), ์ธํฐํ์ด์ค(Interface) (0) | 2024.08.20 |
| ํํ(Tuple), ๋ ์ฝ๋(Record) (0) | 2024.08.19 |
| ๋ฆฌํ๋ ์ (Reflection) (0) | 2024.08.19 |