์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก ๋ ๋ค ํน์ ๋์์ ์ ์ํ๊ณ ๋ค์ํ ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ์ญํ ์ ํ๋ค.
โ ์ถ์ ํด๋์ค(Abstract Class)
์ถ์ ํด๋์ค๋ ํ๋ ์ด์์ ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์๋ ํด๋์ค์ด๋ค. ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค์ฌ์ผ ํ๋ค.
* ์ถ์ ๋ฉ์๋
๋ฉ์๋์ abstract ํค์๋๋ฅผ ๋ถ์ฌ ์ ์ํ๋ค. ์ถ์ ๋ฉ์๋๋ ๊ตฌํ์ด ์๊ณ , ์๊ทธ๋์ฒ๋ง ์ ์ํ๋ฉฐ ์๋ธ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค. ์ถ์ ํด๋์ค ์์ฒด๋ ์ธ์คํด์คํ ํ ์ ์๋ค.
* abstract
์ถ๊ฐ์ ์ผ๋ก ์์ฑ(property), ์ด๋ฒคํธ์ abstract ํค์๋๋ฅผ ๋ถ์ฌ ์ถ์์ผ๋ก ์ ์ํ ์ ์๋ค. ์ด๋ค์ ์๋ธ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํ๋์ด์ผ ํ๋ค.
์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ๋ฌ๋ฆฌ ํ๋, ์์ฑ์, ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์๋ค.
- ๋ชฉ์
์ถ์ ํด๋์ค๋ ๊ณตํต๋ ๋์์ ์ฌ๋ฌ ํด๋์ค์์ ๊ณต์ ํ ์ ์๊ฒ ํ๊ณ , ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์ ์ ๊ณตํ๋ฉด์ ์๋ธ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ ํ ์ ์๊ฒ ํ๋ค.
- ์์
// abstract ํค์๋ ์ฌ์ฉํ์ฌ ์ ์ธ
public abstract class Animal
{
public abstract void MakeSound();
}
public class Cat : Animal
{
// override ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
โ ์ธํฐํ์ด์ค(Interface)
์ธํฐํ์ด์ค๋ ๋ฉ์๋ ์๊ทธ๋์ฒ(๋ฉ์๋ ์ด๋ฆ, ๋ฐํ ํ์ , ๋งค๊ฐ๋ณ์)๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ธํฐํ์ด์ค๋ ๊ตฌํ์ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค.
* default ์ธํฐํ์ด์ค ๋ฉค๋ฒ
C# 8.0๋ถํฐ๋ ์ธํฐํ์ด์ค์์ ๊ตฌํ์ ํฌํจํ์ฌ default ์ธํฐํ์ด์ค ๋ฉค๋ฒ๋ฅผ ๊ตฌํํ ์ ์๋ค. ์ธํฐํ์ด์ค์ ์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๊ณ ๊ตฌํ์ ํฌํจ์ํค๋ฉด, ๊ธฐ์กด ๊ตฌํ์์ ํด๋น ๋ฉค๋ฒ๊ฐ ๊ตฌํ๋์ด์์ง ์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ด default ๊ตฌํ์ ์ฌ์ฉํ๊ฒ ๋๋ค. (๋ฌผ๋ก ๊ตฌํํ์ฌ ์ฌ์ ์๋ ๊ฐ๋ฅ)
- ๋ชฉ์
์ธํฐํ์ด์ค๋ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ ํ ๋์์ ์ ์ํ์ฌ ๊ฐ์ ํ๋ค.
- ์์
public interface IPayment
{
void Pay();
}
public class CreditCard : IPayment
{
public void Pay()
{
// Pay ๋ฉ์๋ ๋ฐ๋์ ๊ตฌํ
}
}
โ ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฐจ์ด์
- ์ถ์ ํด๋์ค๋ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์์ง๋ง ์ธํฐํ์ด์ค๋ ํฌํจํ ์ ์๋ค.
- ์ถ์ ํด๋์ค๋ ํ๋๋ ์ํ๋ฅผ ํฌํจํ ์ ์์ง๋ง ์ธํฐํ์ด์ค๋ ํฌํจํ ์ ์๋ค.
- ์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค.
- ์ถ์ ํด๋์ค๋ ์์ฑ์๋ฅผ ํฌํจํ ์ ์๋ค.
→ ์ถ์ ํด๋์ค๋ ์ํ๋ฉด ์ฌ์ ์ํ ์ ์๋ ํ ํ๋ฆฟ ๊ฐ์ ๋๋, ์ธํฐํ์ด์ค๋ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๊ณ์ฝ์ ๊ฐ์ ๋๋
โ virtual ํค์๋์ abstract ํค์๋์ ์ฐจ์ด์
๋ ํค์๋ ๋ชจ๋ ๋ฉ์๋, ์์ฑ, ์ด๋ฒคํธ ๋ฑ์ ์๋ธํด๋์ค์์ ์ฌ์ ์ ํ ์ ์๋๋ก ํ์ฉํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค.
- virtual๋ก ์ ์ธ๋ ๋ฉ์๋๋ ์์ฑ์ ๊ธฐ๋ณธ ๊ตฌํ์ ์ ๊ณตํ๋ฉฐ, ์๋ธ ํด๋์ค์์ ์ ํ์ ์ผ๋ก ์ฌ์ ์ ํ ์ ์๋ค.
- abstract๋ก ์ ์ธ๋ ๋ฉ์๋๋ ์์ฑ์ ๊ตฌํ์ด ์์ผ๋ฉฐ, ์๋ธ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค.
- virtual ๋ฉ์๋๋ ์ด๋์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ abstract ๋ฉ์๋๋ ๋ฐ๋์ abstract ํด๋์ค์์๋ง ์ฌ์ฉํ ์ ์๋ค.
'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI) (0) | 2024.08.20 |
|---|---|
| ๋คํ์ฑ(Polymorphism), ๋ฐํ์ ๋คํ์ฑ, ์ปดํ์ผ ํ์ ๋คํ์ฑ (0) | 2024.08.20 |
| ํํ(Tuple), ๋ ์ฝ๋(Record) (0) | 2024.08.19 |
| ๋ฆฌํ๋ ์ (Reflection) (0) | 2024.08.19 |
| const, readonly (0) | 2024.08.19 |