본문 바로가기
C#

C# 메서드 사용(3) - 메서드 오버로딩(Method Overloading)

by 고체물리학 2021. 2. 21.

 

메서드 오버로딩(Method OverLoading) /메서드 다중 정의

 

- 동일한 이름의 매개변수(파라미터)가 다른 메서드를 여러 개 정의하는 것

- 기본적으로 메서드는 변수와 마찬가지로 이름(식별자)이 중복되면 안 되지만, 매개변수의 타입이나 개수를 달리하면 이름이 같더라도 구분이 되므로 하나의 식별자로 여러 개의 메서드를 호출할 수 있다

 

[메서드 오버로딩 작성 규칙]

1. 메서드 이름이 동일

2. 매개변수(파라미터) 목록이 반드시 달라야 한다

   : 매개변수 개수 또는 매개변수 타입이 달라야 한다 (즉, 호출하는 시점에서 메서드를 구분할 수 있어야 한다)

3. 리턴 값은 오버 로딩과 무관 (리턴 값이 달라도 매개변수가 동일하면 오버 로딩이 아니다)

 

=> 동일한 이름의 메서드를 호출하는 시점에서 구분할 수 있어야 메서드 오버 로딩

 

 

 

ex) 메서드 오버 로딩이 없는 경우( 메서드를 일일이 만들어줘야 한다)

 

using System;

namespace Test
{
    public class Program
    {

        static void Main(string[] args)
        {
            Fork fork = new Fork();
            Spoon spoon = new Spoon();
            Chopstick chopsticks = new Chopstick();

            MethodNormal mn = new MethodNormal();
            mn.eatUsingFork(fork);
            mn.eatUsingSpoon(spoon);
            mn.eatUsingChopstick(chopsticks);



        }

        class MethodNormal
        {
            // eatUsingFork() 메서드 정의 - 리턴값 없음, 매개변수 Fork 인스턴스 타입
            // => "Fork 를 사용하여 식사" 출력
            public void eatUsingFork(Fork fork)
            {
                Console.WriteLine(fork.name + " 를 사용하여 식사");
            }

            // eatUsingSpoon() 메서드 정의 - 리턴값 없음, 매개변수 Spoon 인스턴스 타입
            // => "Spoon 을 사용하여 식사" 출력
            public void eatUsingSpoon(Spoon spoon)
            {
                Console.WriteLine(spoon.name + " 을 사용하여 식사");
            }

            // eatUsingChopstick() 메서드 정의 - 리턴값 없음, 매개변수 Chopstick 인스턴스 타입
            // => "Chopstick 을 사용하여 식사" 출력
            public void eatUsingChopstick(Chopstick chopsticks)
            {
                Console.WriteLine(chopsticks.name + " 을 사용하여 식사");
            }
        }

      
        class Fork
        {
            public String name = "Fork";
        }

        class Spoon
        {
            public String name = "Spoon";
        }

        class Chopstick
        {
            public String name = "Chopstick";
        }



    }




}

 

[결과]

 

 

 

ex) 매개변수의 이름이 같고 매개변수가 동일한 오버 로딩

 

1. 매개변수의 이름이 다른 경우에는 오버로딩x

public void eat(int a) {}
public void eat(int b) {}

2. 매개변수의 리턴 타입만 다른 경우에도 오버로딩 X
public void eat(int a) {}
public String eat(int b) {}

 

 

using System;

namespace Test
{
    public class Program
    {

        static void Main(string[] args)
        {
            Fork fork = new Fork();
            Spoon spoon = new Spoon();
            Chopstick chopsticks = new Chopstick();

            MethodOverloading mo = new MethodOverloading();
            mo.eat(chopsticks);
            mo.eat(fork);
            mo.eat(spoon);


        }



        class MethodOverloading
        {
            // 메서드 오버로딩
            // eat() 메서드로 이름을 통일하여 Fork, Spoon, Chopstick 인스턴스를 각각 전달
            public void eat(Fork fork)
            {
                Console.WriteLine(fork.name + " 를 사용하여 식사");
            }

            public void eat(Spoon spoon)
            {
                Console.WriteLine(spoon.name + " 을 사용하여 식사");
            }

            public void eat(Chopstick chopsticks)
            {
                Console.WriteLine(chopsticks.name + " 을 사용하여 식사");
            }


        }

        class Fork
        {
            public String name = "Fork";
        }

        class Spoon
        {
            public String name = "Spoon";
        }

        class Chopstick
        {
            public String name = "Chopstick";
        }



    }

 

[결과]

 

 

ex3) 매개변수 개수를 달리 한 오버로딩

using System;

namespace Test
{
    public class Program
    {

        static void Main(string[] args)
        {
            MethodOverloading2 mo = new MethodOverloading2();
            mo.print(3, "Hello, World!"); // "Hello, World!" 3번 반복 출력

            // "Hello, World!", "TEST" 5번 출력
            mo.print(5, "Hell, World!", "TEST");

            // "Hello, World!", "TEST", "C#" 5번 출력
            mo.print(5, "Hell, World!", "TEST", "C#");


        }

        class MethodOverloading2
        {
            //매개변수의 갯수가 다르면 오버로딩으로 인정된다
            public void print(int count, String data)
            {
                // count 횟수만큼 data 문자열 반복 출력
                for (int i = 1; i <= count; i++)
                {
                    Console.WriteLine(data);
                }
            }

            public void print(int count, String data, String data2)
            {
                // count 횟수만큼 data 문자열 반복 출력
                for (int i = 1; i <= count; i++)
                {
                    Console.WriteLine(data + ", " + data2);
                }
            }

            public void print(int count, String data, String data2, String data3)
            {
                // count 횟수만큼 data 문자열 반복 출력
                for (int i = 1; i <= count; i++)
                {
                    Console.WriteLine(data + ", " + data2 + ", " + data3);
                }
            }
        }

    }
}

[결과]

반응형

댓글