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 : 대리자
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730) N
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19) N
      • 일기장 (4)
      • 파이썬 (131) N
        • Basic (42) N
        • 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 (5) N
      • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바