본문 바로가기
프로그래밍/C#

[C#] 다형성 (메서드 오버라이딩) method overriding

by 아임코딩 2023. 5. 5.
728x90
반응형

안녕하세요 아임코딩입니다.

이번에는 객체지향 프로그래밍 언어의 중요한 특징 중 하나인 다형성에 대해서 알아보겠습니다.

 

유튜브 링크

https://youtu.be/LKQteLMuuis

 

다형성 설명

다형성은 하나의 코드가 여러 가지 형태로 실행될 수 있도록 하는 것입니다.

다형성은 크게 오버로딩(overloading)과 오버라이딩(overriding)으로 나눌 수 있습니다.
오버로딩(overloading): 같은 이름의 메서드를 여러 개 정의하는 것입니다. 매개변수의 타입, 개수, 순서가 다른 경우에는 서로 다른 메서드로 인식됩니다.
오버라이딩(overriding): 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것입니다. 자식 클래스에서는 부모 클래스의 메서드와 동일한 이름과 매개변수를 가진 메서드를 정의합니다. 이렇게 하면 상위 클래스의 메서드가 자동으로 가려지고, 하위 클래스의 메서드가 실행됩니다.

 

 

C#으로 구현하는 간단한 오버라이딩에 대해서 알아보겠습니다.

 

메서드 오버라이딩

오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.

 

예제 코드를 살펴보겠습니다.

        public class Parent //부모 클래스
        {
            public void print()
            {
                Console.WriteLine("Parent 클래스의 print 함수입니다.");
            }
        }

        public class Child : Parent //Parent 클래스 상속
        {
            public void print() //메서드 오버라이딩
            {
                Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
            }
        }

 

부모 클래스 Parent 는 print() 메서드를 가지고있습니다.

Child 클래스는 Parent 클래스를 상속받아 print() 메서드도 상속받습니다.

하지만 Child 클래스에서 print() 메서드를 다시 정의하는 것을 확인할 수 있습니다.

이것이 바로 메서드 오버라이딩입니다.

 

부모 클래스에서 정의된 메서드를 자식 클래스에서 다시 정의하는 것이 메서드 오버라이딩입니다.

 

 

프로그램 실행

 

위 코드를 클래스를 기반으로 객체를 만들어 메서드를 호출해보겠습니다.

using System;
namespace Tistory
{
    internal class Program
    {
        public class Parent //부모 클래스
        {
            public void print()
            {
                Console.WriteLine("Parent 클래스의 print 함수입니다.");
            }
        }

        public class Child : Parent //Parent 클래스 상속
        {
            public void print() //메서드 오버라이딩
            {
                Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
            }
        }

        static void Main(string[] args)
        {
            Parent p = new Parent();    //Parent 클래스 객체 p 생성
            Child c = new Child();      //Child 클래스 객체 c 생성

            p.print();  //p 객체의 print() 메서드 호출
            c.print();  //c 객체의 print() 메서드 호출
        }
    }
}

 

Parent 클래스와 Child 클래스에 대해서는 위에서 설명했으니

Main 함수에 대해서만 설명하겠습니다.

 

Parent p = new Parent();      Parent 클래스 객체 p 를 선언하고 할당합니다.

Child c = new Child();           Child 클래스 객체 c 를 선언하고 할당합니다.

 

p.print();                                p 객체의 print() 메서드를 호출합니다.

c.print();                                c 객체의 print() 메서드를 호출합니다.

 

p.print() 는 부모 클래스에서 정의된 

public void print()

{

    Console.WriteLine("Parent 클래스의 print 함수입니다.");

}

가 실행이 됩니다.

 

c.print() 는 자식 클래스에서 정의된

public void print() 
{
    Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
}

가 실행이 됩니다.

 

함수 이름은 print() 로 같지만 실행되는 코드는 다른 것을 확인할 수 있습니다.

이것이 바로 다형성입니다.

다형성을 구현하는 방법 중 하나인 메서드 오버라이딩을 알아봤습니다.

 

728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] 기본 입력 Console.ReadLine()  (0) 2023.05.05
[C#] 추상화 abstract, interface  (0) 2023.05.05
[C#] 다형성 (메서드 오버로딩) method overloading  (0) 2023.05.05
[C#] 상속  (0) 2023.05.05
[C#] 캡슐화  (0) 2023.05.05