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

[C#] 다형성 (메서드 오버로딩) method overloading

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

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

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

 

유튜브 링크

https://youtu.be/EUmlm0jzizs

 

다형성 설명

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

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

 

 

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

 

메서드 오버로딩

오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것입니다. 메서드 이름은 동일하지만 매개변수의 개수, 순서 또는 데이터 유형이 다른 메서드를 정의하는 것입니다.

메서드의 반환형이 다른 것은 메서드 오버로딩이 불가능하니 다른 메서드를 만들어야합니다.

 

print 라는 이름을 가진 함수를 만든다고 생각해봅시다.

print 라는 이름을 가진 함수는 여러 형태를 가질 수 있습니다.

public void print()
public void print(int num)
public void print(string str)
public void print(string str, int num)

이런 식으로 같은 이름을 가진 print 함수를 여러 형태로 선언하고 정의하는 것이 메서드 오버로딩 입니다.

 

 

C# 에서의 메서드 오버로딩

        public class Print
        {
            public void print()
            {
                Console.WriteLine("Hello");
            }
            public void print(int num)
            {
                for(int i = 0; i < num; i++)
                {
                    Console.WriteLine("Nice!!");
                }
            }
            public void print(string str)
            {
                Console.WriteLine(str);
            }
            public void print(string str, int num)
            {
                for (int i = 0; i < num; i++)
                {
                    Console.WriteLine(str);
                }
            }
        }

Print 클래스를 만들고 그 안에

print() 함수 4개를 오버로딩해서 만들었습니다.

print() : 매개변수가 없는 함수 (화면에 Hello 를 출력합니다.)

print(int num) : int 형 매개변수 하나인 함수 (화면에 "Nice!!" 를 매개변수로 받은 정수만큼 반복해 출력합니다.) 

print(string str) : string 형 매개변수 하나인 함수 (매개변수로 받은 문자열을 화면에 출력합니다.)

print(string str, int num) : string 형, int 형 매개변수 각각 하나씩인 함수 (매개변수로 받은 문자열을 매개변수로 받은 정수만큼 반복해 출력합니다.)

 

이렇게 메서드 오버로딩이 된 함수들을 호출해보겠습니다.

 

using System;
namespace Tistory
{
    internal class Program
    {
        public class Print
        {
            public void print()
            {
                Console.WriteLine("Hello");
            }
            public void print(int num)
            {
                for(int i = 0; i < num; i++)
                {
                    Console.WriteLine("Nice!!");
                }
            }
            public void print(string str)
            {
                Console.WriteLine(str);
            }
            public void print(string str, int num)
            {
                for (int i = 0; i < num; i++)
                {
                    Console.WriteLine(str);
                }
            }
        }

        static void Main(string[] args)
        {
            Print myP = new Print();
            
            myP.print();
            myP.print(3);
            myP.print("메서드 오버로딩 예제입니다.");
            myP.print("오버로딩 어렵지 않아요", 3);
        }
    }
}

 

Main 함수에서 Print 클래스의 객체 myP를 생성합니다.

myP.print() -> "Hello" 가 출력됩니다.

myP.print(3) -> "Nice!!" 가 3번 출력됩니다.

myP.print("메서드 오버로딩 예제입니다."); -> "메서드 오버로딩 예제입니다." 가 출력됩니다.

myP.print("오버로딩 어렵지 않아요", 3); -> "오버로딩 어렵지 않아요" 가 3번 출력됩니다.

 

 

이상으로 C#에서 제공하는 메서드 오버로딩에 대해서 알아봤습니다.

728x90
반응형

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

[C#] 추상화 abstract, interface  (0) 2023.05.05
[C#] 다형성 (메서드 오버라이딩) method overriding  (0) 2023.05.05
[C#] 상속  (0) 2023.05.05
[C#] 캡슐화  (0) 2023.05.05
[C#] 객체지향 프로그래밍 언어 특징  (0) 2023.05.05