C# 객체지향 다형성 : new, virtual, override, sealed

2023. 3. 30. 03:21·C#
반응형
C#에서는 다양한 키워드를 사용하여 메서드, 속성 및 이벤트를 재정의하거나 구현할 수 있습니다. 이번 글에서는 new, virtual, override, sealed 키워드에 대해 자세히 살펴보겠습니다.

new 키워드

new 키워드는 부모 클래스의 메서드, 속성 또는 이벤트를 숨기고 새로운 멤버를 정의할 때 사용됩니다. new 키워드를 사용하면 부모 클래스의 멤버를 완전히 대체할 수 있습니다. 다음은 new 키워드를 사용하여 메서드를 숨기는 예입니다.

public class Animal
{
    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public new void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 new 키워드를 사용하여 숨기고, Dog 클래스에서 새로운 Eat() 메서드를 정의합니다.


virtual 키워드

virtual 키워드는 메서드, 속성 또는 이벤트를 재정의할 수 있도록 허용합니다. virtual 멤버는 하위 클래스에서 재정의될 수 있습니다. 다음은 virtual 키워드를 사용하여 메서드를 재정의하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 virtual 키워드를 사용하여 재정의할 수 있도록 허용하고, Dog 클래스에서 Eat() 메서드를 재정의합니다.


override 키워드

override 키워드는 하위 클래스에서 가상 멤버를 재정의할 때 사용됩니다. override 멤버는 기본 구현을 대체합니다. 다음은 override 키워드를 사용하여 메서드를 재정의하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속합니다. Eat() 메서드를 virtual 키워드를 사용하여 재정의할 수 있도록 허용하고, Dog 클래스에서 override 키워드를 사용하여 Eat() 메서드를 재정의합니다.


sealed 키워드

sealed 키워드는 하위 클래스에서 멤버를 재정의할 수 없도록 합니다. sealed 멤버는 하위 클래스에서 숨길 수 없습니다. 다음은 sealed 키워드를 사용하여 메서드를 재정의할 수 없게 하는 예입니다.

public class Animal
{
    public virtual void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

public class Dog : Animal
{
    public sealed override void Eat()
    {
        Console.WriteLine("Dog is eating.");
    }
}

public class Bulldog : Dog
{
    // This will cause a compiler error:
    // 'Bulldog.Eat()': cannot override sealed method 'Dog.Eat()'
    //public override void Eat()
    //{
    //    Console.WriteLine("Bulldog is eating.");
    //}
}

위의 예제에서 Bulldog 클래스는 Dog 클래스를 상속합니다. Dog 클래스에서 Eat() 메서드를 sealed 키워드를 사용하여 재정의할 수 없게 하고, Bulldog 클래스에서 Eat() 메서드를 재정의하려고 하면 컴파일러 오류가 발생합니다.


결론

C#에서 new, virtual, override, sealed 키워드를 사용하여 메서드, 속성 및 이벤트를 재정의하거나 구현할 수 있습니다. new 키워드는 부모 클래스의 멤버를 숨기고 새로운 멤버를 정의할 때 사용됩니다. virtual 키워드는 하위 클래스에서 멤버를 재정의할 수 있도록 허용합니다. override 키워드는 하위 클래스에서 가상 멤버를 재정의할 때 사용됩니다. sealed 키워드는 하위 클래스에서 멤버를 재정의할 수 없게 합니다. 이번 글을 통해 C#에서 멤버를 재정의하는 방법에 대해 알아보았습니다.

저작자표시 비영리 변경금지 (새창열림)

'C#' 카테고리의 다른 글

C# Reflection문  (0) 2023.04.05
C# 네이밍 규칙 : PascalCase, camelCase, Snake case  (0) 2023.04.05
C# 정규표현식  (0) 2023.03.29
C# Delegate : 대리자  (0) 2023.03.28
C# Dictionary ContainsKey() vs TryGetValue()  (1) 2023.03.28
'C#' 카테고리의 다른 글
  • C# Reflection문
  • C# 네이밍 규칙 : PascalCase, camelCase, Snake case
  • C# 정규표현식
  • C# Delegate : 대리자
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    C#
    믈레코비타멸균우유
    programmerlife
    cv2
    list
    스크립트 실행
    상품 리뷰 크롤링
    ipcamera
    유니티
    codingtips
    learntocode
    스크립트 실행 순서
    파이썬
    appdevelopment
    devlife
    리뷰이관
    쇼핑몰리뷰
    스마트스토어리뷰
    unity
    codingcommunity
    카페24리뷰
    카페24리뷰이관
    셀레니움
    rtsp
    programming101
    긴유통기한우유
    리뷰관리
    Python
    라떼우유
    리스트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
C# 객체지향 다형성 : new, virtual, override, sealed
상단으로

티스토리툴바