관리 메뉴

제목없음

제네릭 프로그래밍 본문

프로그램 작성/컴퓨터 언어

제네릭 프로그래밍

다람군 2012.06.30 02:14
C++ 언어를 사용하다 보면 템플릿 프로그래밍(Template Metaprogramming)을 사용하는 일이 종종 발생하게 됩니다. 컴파일러 언어인 C++에서는 컴파일을 하면서 사용하는 모든 함수, 클래스를 해당 자료형에 맞게 따로 만들어서 컴파일을 하게 되는데, 이런 경우에는 제네릭 프로그래밍과 메타 프로그래밍의 조합의 형태인 경우입니다.

Java에는 비교적 최근에 제네릭 프로그래밍 개념이 탑재되었고, C#도 초기 버전(1.0)에서는 탑재되지 않은 개념이지요. 제네릭 프로그래밍은 자료형에 구애받지 않고 하나의 값이 여러 자료형을 받을 수 있도록 하는 것입니다. 크게 보자면 동적 타이핑도 제네릭 프로그래밍에 속하지만, 보통은 템플릿 형태를 사용하는 경우 제네릭 프로그래밍을 한다고 말합니다.

제네릭 프로그래밍은 프로그램의 다형성을 높일 수 있고 코드의 재사용이 용이하도록 해준다는 장점이 있습니다만, 제대로 사용하지 못하면 오히려 큰 불편함을 낳는 양날의 칼인 셈이지요.

아래는 C#을 이용한 제네릭 프로그래밍의 예시입니다.

 

namespace GenericTest
{
    public class Program
    {
        public static void Swap<T>(ref T a, ref T b)
        {
            T t = a; a = b; b = t;
        }

        public static void Main()
        {
            System.Int32 a = 10, b = 20;
            Swap<System.Int32>(ref a, ref b);
            System.Console.WriteLine(System.String.Format("a = {0}, b = {1}", a, b));

            System.Single c = 1.01f, d = 2.201f;
            Swap<System.Single>(ref c, ref d);
            System.Console.WriteLine(System.String.Format("c = {0}, d = {1}", c, d));
        }
    }
}

여기서 구현한 Swap 함수를 이용하면 어떤 자료형의 객체라도 서로 교환할 수 있게 되지요. 재사용성이 증가하고, 자료형이 다르더라도 기능 사용이 가능하므로 다형성도 보장됩니다.

C#, Java, C++과 같이 자료형을 깐깐하게 테스트하는 언어들에서는 이러한 템플릿 문법이 반드시 필요하지만 동적 타이핑을 지원하는 많은 인터프리터 언어들은 자체가 제네릭 프로그래밍을 수행하는 것이라고 볼 수 있습니다. 자료형 검사를 엄격하게 수행하지 않기 때문에(애초에 변수를 만들거나 하는 일에서 자료형 선언을 하지 않기 때문에) 어떠한 자료라도 넣을 수 있고, 때문에 의도하지 않더라도 제네릭 프로그래밍이 되는 것이지요.

0 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 Next