[C# 문법] C# 제너릭 메서드란? 제너릭 메서드 (Generic Method) 사용방법


안녕하세요.

 

오늘은 C# 문법에서 제너릭 메서드란 무엇이고, 어떤 경우에 제너릭 메서드를 만들어서 사용하는지에 대해서 알아보려고 합니다.

 

평소에 소스코드를 다 짜고 나서 코드 리뷰를 할 때, 가끔씩 메서드의 형태는 같은데 단순히 매개변수(Parameter) 의 타입만 다르게 오버로딩 하여 메서드를 여러 개 만들어 보신 경험들이 있으실 거에요!


 

예를 들어 아래와 같이 각각 정수, 문자열을 Swap 해주는 메서드가 있습니다.


정수 Swap 메서드


1

2

3

4

5

6

7

8

        public void Swap(ref int a, ref int b)

        {

            int temp;

 

            temp = a;

            a = b;

            b = temp;

        }

cs

 

문자형 Swap 메서드


1

2

3

4

5

6

7

8

        public void Swap(ref string a, ref string b)

        {

            string temp;

 

            temp = a;

            a = b;

            b = temp;

        }

Colored by Color Scripter

cs

 

위의 두 메서드를 보시게 되면 매개변수 타입만 각각 int , string 형으로 다를 뿐 그 외의 내부에서 동작하는 로직은 모두 동일합니다.

 

, 이럴 경우에 코드를 일반화 한다면 굳이 오버로딩을 할 필요 없이 하나의 메서드 만으로 여러 곳에서 호출이 가능하기 때문에 유지보수에도 좋고, 가독성도 좋은 코드가 되지 않을까 생각 되어집니다.

 

이럴 때 사용하는 것이 바로 제너릭 메서드 입니다.


제너릭 메서드를 간단히 요약하자면,

데이터 형식을 일반화한 메서드라고 쉽게 이해하시면 되겠습니다.

 

그럼 위에서 만든 두개의 오버로딩된 Swap 메서드를 제너릭 함수로 바꿔서 호출까지 하는 예제 코드를 작성해 보도록 하겠습니다.

 

제너릭 메서드 예제 코드


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace Generic

{

    class Program

    {

        static void Main(string[] args)

        {

            int a = 12;

            int b = 5;

 

            //제너릭 메서드 Swap 호출

            Swap<int>(ref a, ref b);

 

            Console.WriteLine("a : {0} , b : {1}", a, b);

 

            string str1 = "범범조조";

            string str2 = "류현진";

 

            //제너릭 메서드 Swap 호출

            Swap<string>(ref str1, ref str2);

 

            Console.WriteLine("str1 : {0}, str2 : {1}", str1, str2);

        }

 

        /// <summary>

        /// 제너릭 메서드 생성

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="a"></param>

        /// <param name="b"></param>

        public static void Swap<T>(ref T a, ref T b)

        {

            T temp;

 

            temp = a;

            a = b;

            b = temp;

        }

    }

}

 

Colored by Color Scripter

cs

 

실행 결과



이처럼, 굳이 오버로딩 해서 두 개의 Swap 메서드를 만들 필요 없이, 하나의 제너릭 메서드만 생성하여 호출 할 때 원하는 타입만 넣어주고 사용하면 코드도 깔끔해지고 유지보수도 훨씬 편해질 거라 생각합니다.

 

오늘은 간단히 제너릭 메서드에 대해서 알아보았습니다!

 

감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY