[C#] abstract, interface, virtual (feat. override, new)

2024. 2. 11. 18:09Β·πŸ“ Language/✏ C#

1. abstract, interface, virtual

1) abstract

abstractλŠ” νŒŒμƒ ν΄λž˜μŠ€μ—κ²Œ 곡톡적인 μ •μ˜λ₯Ό μ œκ³΅ν•¨κ³Ό λ™μ‹œμ— νŒŒμƒ ν΄λž˜μŠ€μ— μ‚¬μš©λ  κΈ°λŠ₯을 κ°•μ œμ μœΌλ‘œ μž¬μ •μ˜ν•¨μ— μžˆλ‹€.

  • abstract ν‚€μ›Œλ“œλ‘œ μ •μ˜ν•œ λ©”μ„œλ“œλ‚˜ 속성은 본문을 μ •μ˜ν•  수 μ—†λ‹€.
  • 일반 λ©”μ„œλ“œλ‚˜ 속성을 μ •μ˜ν•  수 μžˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†λ‹€.
abstract class Animal
{
    public string name;
    public abstract void Speak();
 
    public void Sleep()
    {
        Console.WriteLine("Zzzzz...");
    }
}
 
class Dog : Animal
{
    public Dog(string name)
    {
        this.name = name;
    }
 
    public override void Speak()
    {
        Console.WriteLine($"hello I'm {name} !!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog("Doggy");
        dog.Speak(); // hello I'm Doggy !!
        dog.Sleep(); // Zzzzz...
    }
}

 

2) interface

interfaceλŠ” μƒμ†μ˜ κ°œλ…λ³΄λ‹¨ κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ” κ°œλ…μœΌλ‘œ κ°€μž₯ 높은 좔상성을 μ œκ³΅ν•œλ‹€.

  • λ©”μ„œλ“œ, ν”„λ‘œνΌν‹° μΈλ±μ„œλ§Œ κ°€μ§ˆ 수 μžˆλ‹€.
  • abstractκ°€ μ•„λ‹Œ ν•„λ“œλŠ” μ •μ˜ν•  수 μ—†λ‹€. 즉, κ°•μ œμ μœΌλ‘œ μž¬μ •μ˜κ°€ ν•„μš”ν•˜λ‹€.
  • μ ‘κ·Ό μ œν•œμžλ₯Ό μ‚¬μš©ν•  수 μ—†μœΌλ©° λͺ¨λ“  ν•„λ“œλŠ” public이 μ μš©λœλ‹€.
  • 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€.
abstract class Animal
{
    public abstract void Speak();
}
 
interface IWalk
{
    void Walk();
}
 
class Dog : Animal, IWalk
{
    public override void Speak()
    {
        Console.WriteLine("I'm Dog !!");
    }
 
    public void Walk()
    {
        Console.WriteLine("Dog : λ„€ 발둜 μ—‰κΈˆ μ—‰κΈˆ");
    }
}
 
class Human : IWalk
{
    public void Walk()
    {
        Console.WriteLine("Human : 두 발둜 λšœλ²… λšœλ²…");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Speak(); // I'm Dog !!
        dog.Walk();  // Dog : λ„€ 발둜 μ—‰κΈˆ μ—‰κΈˆ
 
        Human human = new Human();
        human.Walk(); // Human : 두 발둜 λšœλ²… λšœλ²…
    }
}

 

3) virtual

virtual은 μž¬μ •μ˜ν•  수 μžˆμ§€λ§Œ ν•„μˆ˜λŠ” μ•„λ‹ˆλ©° κ·Έ μžμ²΄λ‘œλ„ μ™„λ²½ν•œ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("I'm Creature");
    }
}
 
class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("I'm Dog!");
    }
}
 
class Cat : Animal
{
}
class Program
{
    static void Main(string[] args)
    {
        Animal animal = new Animal();
        Dog dog = new Dog();
        Cat cat = new Cat();
 
        animal.Speak(); // I'm Creature
        dog.Speak(); // I'm Dog!
        cat.Speak(); // I'm Creature
    }
}

 

2. override, new

virtual method(가상 λ©”μ„œλ“œ)λŠ” abstract method(좔상 λ©”μ„œλ“œ)와 달리 μž¬μ •μ˜ μ—¬λΆ€λŠ” 선택이닀. κ·Έλž˜μ„œ 가상 λ©”μ„œλ“œκ°€ ν¬ν•¨λœ 클래슀λ₯Ό μƒμ†ν•˜μ—¬ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•  λ•Œ, override, new 두 ν•œμ •μžλ‘œ μ •μ˜ν•  수 μžˆλ‹€. 좔상 λ©”μ„œλ“œλŠ” override만 κ°€λŠ₯ν•˜λ‹€.

  • overrideλŠ” μžμ‹ μ΄ 상속받은 λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•˜λŠ” 것이닀.
  • newλŠ” λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ™„μ „νžˆ λ¬΄μ‹œν•˜κ³  λ™μΌν•œ μ΄λ¦„μ˜ μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό λ§Œλ“œλŠ” 것이닀.

 

μ°Έκ³ 

https://kangworld.tistory.com/186

 

[C#] virtual, abstract, interface

✍️ virtual virtual의 κ°€μž₯ 큰 νŠΉμ§•μ€ 선택적인 μž¬μ •μ˜(override)κ°€ κ°€λŠ₯ν•˜λŠ” 것이닀. virtual이 뢙은 λ©”μ„œλ“œμ™€ 속성, μΈλ±μ„œλŠ” μž¬μ •μ˜ν•  수 μžˆμ§€λ§Œ ν•„μˆ˜λŠ” μ•„λ‹ˆλ©° virtual ν‚€μ›Œλ“œκ°€ ν¬ν•¨λœ ν΄λž˜μŠ€λŠ” κ·Έ

kangworld.tistory.com

https://im-first-rate.tistory.com/5

 

[C#] override VS new μž¬μ •μ˜ μ‚¬μš© 방법(feat. virtual, abstract)

virtual method (가상 λ©”μ„œλ“œ) λŠ” abstract method (좔상 λ©”μ„œλ“œ) 와 달리, μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ μ—¬λΆ€λŠ” μ„ νƒμž…λ‹ˆλ‹€. 좔상 λ©”μ„œλ“œμ—μ„œλŠ” μž¬μ •μ˜λŠ” ν•„μˆ˜μž…λ‹ˆλ‹€. 가상 λ©”μ„œλ“œκ°€ ν¬ν•¨λœ 클래슀λ₯Ό μƒμ†ν• λ•Œ

im-first-rate.tistory.com

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C#' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C#] Delegate, Event (Feat. 무λͺ… ν•¨μˆ˜, Func, Action)
  • [C#] DateTime, TimeSpan, Stopwatch
  • [C#] Math
  • [C#] struct λŒ€μ‹  classλ₯Ό 써야 ν•  λ•Œ
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C#] abstract, interface, virtual (feat. override, new)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”