Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 초기 바인딩(Early Binding)이란? 개념부터 함수 오버로딩 예제까지

초기 바인딩(Early Binding)이란?

컴파일 시점(Compile Time)에 함수 호출과 실제 객체(함수 본문)를 연결하는 메커니즘을 초기 바인딩(Early Binding) 또는 정적 바인딩(Static Binding)이라고 합니다. 프로그램이 실행되기 전에 어떤 함수가 호출될지 미리 결정되므로, 실행 속도가 빠르고 동작이 안정적이라는 장점이 있습니다.

C#에서는 이러한 정적 다형성(Static Polymorphism)을 구현하기 위해 다음 두 가지 기법을 제공합니다.

  • 함수 오버로딩(Function Overloading)
  • 연산자 오버로딩(Operator Overloading)

함수 오버로딩(Function Overloading)

동일한 범위(scope) 안에서 같은 이름의 함수를 여러 개 정의할 수 있습니다. 단, 각 정의는 매개변수 목록에서 매개변수의 자료형 또는 개수가 서로 달라야 합니다. 주의할 점은 반환 타입만 다른 함수 선언은 오버로딩으로 인정되지 않는다는 것입니다.

예제 코드

using System;

namespace PolymorphismApplication {
    class Printdata {
        void print(int i) {
            Console.WriteLine("Printing int: {0}", i);
        }

        void print(double f) {
            Console.WriteLine("Printing float: {0}", f);
        }

        void print(string s) {
            Console.WriteLine("Printing string: {0}", s);
        }

        static void Main(string[] args) {
            Printdata p = new Printdata();

            // 정수 출력용 print 호출
            p.print(5);

            // 실수 출력용 print 호출
            p.print(500.263);

            // 문자열 출력용 print 호출
            p.print("Hello C#");
            Console.ReadKey();
        }
    }
}

실행 결과

Printing int: 5
Printing float: 500.263
Printing string: Hello C#

위 예제에서 print() 메서드는 이름은 같지만 매개변수의 자료형(int, double, string)이 각각 다릅니다. 컴파일러는 호출 시 전달된 인자의 타입을 분석하여 어느 버전의 print()를 실행할지 컴파일 시점에 미리 결정합니다. 이것이 바로 초기 바인딩(정적 바인딩)에 기반한 함수 오버로딩의 동작 방식입니다.

연산자 오버로딩(Operator Overloading)

정적 다형성의 또 다른 기법인 연산자 오버로딩은 operator 키워드를 사용하여 +, -, * 등의 연산자를 사용자 정의 클래스나 구조체에 맞게 재정의하는 기능입니다. 이 역시 어떤 연산자 구현이 사용될지 컴파일 시점에 결정되므로 초기 바인딩에 해당합니다.