[C#] 7강 오버로딩, 오버라이딩

Dog발자·2024년 1월 31일

c#

목록 보기
8/8

오버로딩, 오버라이딩

1. 오버로딩(Overloding)
메소드의 이름은 같게, 매개변수 자료형은 다르게 합니다.

💡 오버로딩을 하는 이유
기능이 비슷한데 메소드 하나로 합치기 힘들 경우, 오버로딩을 해서 같은 이름으로 여러개의 메소드를 만들 수 있습니다.

1. 매개변수 개수에 따른 오버로딩
메서드의 매개변수 개수가 다르면 같은 이름의 메서드를 여러 개 정의할 수 있습니다.
아래 예시에서는 display 메서드를 오버로딩합니다

using System;

namespace MethodOverloadExample
{
    class Program
    {
        // 매개변수가 하나인 메서드
        void Display(int a)
        {
            Console.WriteLine("Arguments: " + a);
        }

        // 매개변수가 두 개인 메서드
        void Display(int a, int b)
        {
            Console.WriteLine("Arguments: " + a + " and " + b);
        }

        static void Main(string[] args)
        {
            Program p1 = new Program();
            p1.Display(100);          // 하나의 매개변수를 받는 메서드 호출
            p1.Display(100, 200);     // 두 개의 매개변수를 받는 메서드 호출
            Console.ReadLine();
        }
    }
}

2. 매개변수 데이터 타입에 따른 오버로딩
매개변수의 데이터 타입이 다르면 같은 이름의 메서드를 오버로딩할 수 있습니다.
아래 예시에서는 display 메서드를 다른 데이터 타입으로 오버로딩합니다:

using System;

namespace MethodOverloadExample
{
    class Program
    {
        // int 타입 매개변수를 받는 메서드
        void Display(int a)
        {
            Console.WriteLine("int type: " + a);
        }

        // string 타입 매개변수를 받는 메서드
        void Display(string b)
        {
            Console.WriteLine("string type: " + b);
        }

        static void Main(string[] args)
        {
            Program p1 = new Program();
            p1.Display(100);            // int 타입 매개변수를 받는 메서드 호출
            p1.Display("Programiz");    // string 타입 매개변수를 받는 메서드 호출
            Console.ReadLine();
        }
    }
}

💡 주의해야 될 점 : 자료형이 같으면 안 된다

이름이 같아도 매개변수의 자료형이 달라야 합니다.
코드를 컴파일을 할 때 매개변수의 자료형을 구분이 되어야 합니다.
그 변수,함수에 있는 값를 가지고와서 값을 출력하는건데 똑같은 변수,함수이면 컴퓨터 구분을 못해서 안됩니다.

옳은 예시: 메소드명은 같지만 매개변수의 자료형이 달라서 가능합니다

public void AHuman(int face, int body){

}

public void AHuman(float face, float body){

}

잘못된 예시: 매개변수의 자료형 똑같으면 컴파일 할 때 컴퓨터가 구분을 못해서 오류가 납니다.

public void AHuman(int face, int body){

}

public void AHuman(int face, int body){

}

저는 오버로딩을 "동명이인은 있지만, 도블갱어는 절대로 없다"로 이해를 했습니다.

동명이인 예시를 들어보면
민수(1)과 이름이 똑같은 민수(2)가 있습니다.
민수(1)와 민수(2)는 이름은 똑같지만 성분(얼굴, 키 등)이 다릅니다.

하지만 도블갱어 예시를 들어보면
하지만 민수(1)과 민수(1)이 이름도 똑같고 성분(얼굴, 키 등)이 모든 것이 똑같다면 사람들이 헷갈려 할 것 입니다. 컴퓨터도 마찬가지 입니다.

2.오버라이딩(Overriding)

부모-자식 관계에 있는 클래스에서 부모 클래스에 있는 메소드를 자식 클래스에서 이름과 매개변수를 맞춰줘서 선언하여 재정의하는 것을 의미합니다.

💡 오버라이딩을 하는 이유
상속(오버라이딩)을 하는 이유는 세부적으로 나누기 위해서 한다.

using System;

//부모 클래스
class Animal
{
    int 
    //virtual: 오버라이딩 원본
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

//자식클래스
class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

//자식클래스
class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

//메인클래스
class Program
{
    static void Main()
    {
        Animal animal1 = new Animal();
        Animal animal2 = new Dog();
        Animal animal3 = new Cat();

        animal1.MakeSound(); // Animal makes a sound
        animal2.MakeSound(); // Dog barks
        animal3.MakeSound(); // Cat meows
    }
}

오버라이딩은 "부모와 자식" 이 키워드만 알면 쉽게 생각할 수 있을 겁니다.

오버로딩(동명이인은 있으나, 도블갱어는 없다.) : 하나의 메소드에 여러 개의 구현을 과적 가능

오버라이딩(부모와 자식): 기반 클래스에서 물려받은 메소드를 파생 클래스에서 재정의

0개의 댓글