C# 상속과 다형성

2024. 4. 24. 20:43C#/C# 학습정리

목차

  1. 상속이란?
  2. 다형성이란?


    상속이란?

    상속은 객체 지향 프로그래밍의 기본적인 특성 중 하나이다. 부모 클래스의 동작을 다시 사용, 확장 또는 수정하는 자식 클래스를 정의할 수 있다. 멤버가 상속되는 클래스를 기본 클래스라고 합니다. 기본 클래스의 멤버를 상속하는 클래스를 파생 클래스라고 한다.

     

    상속에도 여러가지 종류가있다.

    (다중상속, 단일사옥, 인터페이스 상속)

    주의할 점은 C#에서는 하나의 클래스가 단일 클래스에서만 상속할 수 있다는 점이다.

     

    그러니깐 부모가 가지고있는 여러 데이터(멤버변수)와 동작(멤버함수)를 자식이 그대로 사용할 수 있으며 여기서 더나아가 자식만의 특색을 가지게 확장을하여 파생 클래스를 만드는것이다.

     

    class Animal
    {
    	public int age,name;
        
        public void Walk()
        {
        	Console.WriteLine("걷기");
        }
    }
    
    class Dog:Animal
    {
    	public void Bark()
        {
        	Console.WriteLine("짖기");
        }
    }

     

    위는 이름과 나이를 필드로 가지고있고, Walk() 메서드를 가지고있다. Dog클래스는 Animal 클래스를 상속받아 Bark() 메서드를 하나 더 생성하여 이름,나이, Walk(),Bark() 4가지를 가지게 되는 것이다. 

     

    상속의 장점으로는 다음과 같다

    • 계층 구조의 표현
    • 유지보수성 향상
    • 코드의 재사용성

     

    다형성이란?

    다형성은 "여러 형태"를 의미하는 단어이고 두 가지 고유한 측면을 가진다.

    • 런타임시 자식 클래스의 객체가 기본 클래스의 객체의 동작으로 처리될 수도 있다.
    • 부모 클래스는 가상메서드(virtual)을 정의 및 구현할 수 있고, 자식 클래스는 이러한 가상 메서드를 재정의할 수 있다.
    ublic class Shape
    {
        // A few example members
        public int X { get; private set; }
        public int Y { get; private set; }
        public int Height { get; set; }
        public int Width { get; set; }
    
        // Virtual method
        public virtual void Draw()
        {
            Console.WriteLine("Performing base class drawing tasks");
        }
    }
    
    public class Circle : Shape
    {
        public override void Draw()
        {
            // Code to draw a circle...
            Console.WriteLine("Drawing a circle");
            base.Draw();
        }
    }
    public class Rectangle : Shape
    {
        public override void Draw()
        {
            // Code to draw a rectangle...
            Console.WriteLine("Drawing a rectangle");
            base.Draw();
        }
    }

    해당코드는 C#공식문서에서 가져온 코드인데 다형성에 대해서 설명이 되어있다. 기본 클래스에서도 Draw()메서드가 필요하고 Shape 기본클래스를 물려받은 Circle과 Rectangle과 같은 파생클래스들이 Draw() 메서드에서 본인의 형태를 그리는 메서드가 필요하다 여기서 부모클래스(기본클래스)에있는 Draw()함수를 재정의 해야하는데 이때 Vritual, Override 키워드가 등장한다.

     

    Virtual Keyword


    기본클래스에서 메서드를 만들때 자식클래스에서 재정의가 필요하다고 생각되는 메서드 앞에다가 virtual 키워드를 붙히면 된다. 런타임시에 클라이언트 코드에서 해당 virtual 키워드를 보고 해당 클래스가 어디서 재정의 되었는지 찾아 재정의 된 메서드를 호출한다. 실제로 자식 클래스의 재정의 된 코드가 실행되게 하는 것이다.

     

    Override Keyword

    해당 키워드가 붙은 함수는 오버라이딩 함수라는 것을 명시한다. 말그대로 자식클래스에서 부모 클래스의 메서드를 재정의 하겠다는 뜻이다. 부모 클래스와 메서드의 이름이 반드시 동일해야하고 매개변수도 마찬가지로 동일해야한다. 그리고 부모 클래스의 재정의할 메서드가 virtual키워드가 붙은 가상함수여야한다.


     

    출처-https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/object-oriented/polymorphism

     

    다형성 - C#

    기본 및 파생 클래스 간의 관계를 설명하는 C#과 같은 개체 지향 프로그래밍 언어의 핵심 개념인 다형성에 대해 알아봅니다.

    learn.microsoft.com


     

     

     

    'C# > C# 학습정리' 카테고리의 다른 글

    C# - Queue  (0) 2024.05.02
    C# - Event  (1) 2024.04.30
    C# - Stack  (0) 2024.04.29
    C# StreamReader ,StreamWriter, 파일 읽기, 쓰기  (0) 2024.04.26
    C# Ref 와 Out 키워드  (0) 2024.04.23