■ 인터페이스를 이용해 타입 매개 변수를 제한하는 제네릭 클래스를 작성하는 방법을 보여준다.
▶ 예제 코드 (C#)
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
using System; /// <summary> /// 메시지 인터페이스 /// </summary> public interface IMessage { //////////////////////////////////////////////////////////////////////////////////////////////////// Method #region 메시지 구하기 - GetMessage() /// <summary> /// 메시지 구하기 /// </summary> /// <returns>메시지</returns> string GetMessage(); #endregion } /// <summary> /// 자동차 클래스 /// </summary> public class CarClass : IMessage { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 메시지 구하기 - GetMessage() /// <summary> /// 메시지 구하기 /// </summary> /// <returns>메시지</returns> public string GetMessage() { return "자동차"; } #endregion } /// <summary> /// 비행기 클래스 /// </summary> public class AirplaneClass : IMessage { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 메시지 구하기 - GetMessage() /// <summary> /// 메시지 구하기 /// </summary> /// <returns>메시지</returns> public string GetMessage() { return "비행기"; } #endregion } /// <summary> /// 제네릭 클래스 /// </summary> /// <typeparam name="T">타입</typeparam> public class GenericClass<T> where T : IMessage // IMessage 인터페이스로 타입 T를 제한한다. { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 객체 /// </summary> private T instance; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - GenericClass(instance) /// <summary> /// 생성자 /// </summary> /// <param name="instance">객체</param> public GenericClass(T instance) { this.instance = instance; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 메시지 쓰기 - WriteMessage() /// <summary> /// 메시지 쓰기 /// </summary> public void WriteMessage() { string message = this.instance.GetMessage(); Console.WriteLine(message); } #endregion } ... CarClass carClass = new CarClass(); GenericClass<CarClass> carGenericClass = new GenericClass<CarClass>(carClass); carGenericClass.WriteMessage(); AirplaneClass airplaneClass = new AirplaneClass(); GenericClass<AirplaneClass> airplaneGenericClass = new GenericClass<AirplaneClass>(airplaneClass); airplaneGenericClass.WriteMessage(); |