Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷! Ver 2.0~

.NET은 순식간(?)에 버전업 되었습니다. 이는 신기술의 탄생도 동반했습니다 .NET 2.0 , .NET 3.0, .NET 3.5 등 새로운 기능 및 확장된 기능에 대해 다룹니다

[Generics] 사용자 정의 Generics

작성자 : 박종명
최초 작성일 : 2008-05-13 (화요일)
최종 수정일 : 2008-05-13 (화요일)
조회 수 : 2735

닷넷 프레임웍 2.0 에서 기본 제공되는 Generics 관련 클래스외에 프로그래머가 임의로 자신의

클래스나 메서드에 Generics 기법을 적용할 수 있다.

 

1. 사용자 정의 Generics Class

 

사용자가 정의하는 임의의 클래스에 Generics 이용하는 간단한 데모를 살펴 보자
우선 아래와 같이 Class 를 선언한다.

 

public class MyGenericClass<T>

{

        private T myValue;

        public T MyValue

        {

            set { this.myValue = value; }

            get { return this.myValue; }

        }       

}

 

이 클래스는 T 라는 임의의 타입을 명시하여 선언되었다. T 는 이 클래스가 생성될 때 타입이 결정되어 클래스 내에 T 라고 선언된 데이터들은 실행시에 데이터 타입이 결정된다.이 클래스를 사용하는 코드를 살펴 보자.

 

static void Main(string[] args)

{

            MyGenericClass<int> mgc1 = new MyGenericClass<int>();

            mgc1.MyValue = 1;

            Console.WriteLine(mgc1.MyValue);

 

            MyGenericClass<string> mgc2 = new MyGenericClass<string>();

            mgc2.MyValue = "하하";

            Console.WriteLine(mgc2.MyValue);

}

 

MyGenericClass 형 객체를 두개 생성하였는데 mgc1은 타입 매개변수로 int , mgc2 타입 매개변수로 string 로 지정하였다. 따라서 클래스 내의 myValue 는 이렇게 전달된 타입 매개변수에 따라 그 데이터 타입이 결정되어 진다.

사용자 정의 클래스 뿐만 아니라 구조체에도 동일하게 적용할 수 있다.

 

 

2. Generics 메서드

 

클래스나 구조체 뿐만 아니라 메서드에도 Generics 를 사용할 수 있다.일명 Generics Method 이다. 아래의 간단한 데모 코드를 보자.

public class MyGenericMethod

{       

   public void MyMethod<T>(T myValue)

   {

     Console.WriteLine(String.Format("'{0}'의타입은{1}입니다",

myValue,myValue.GetType()));

    }        

}

class Program

{

        static void Main(string[] args)

        {

            MyGenericMethod mgm = new MyGenericMethod();

            mgm.MyMethod<string>("하하");

        }       

}

 

Generics 클래스에서와 마찬가지로 메서드 호출 시 타입을 전달하여 메서드 내의 T 전달한
데이터 타입으로 결정되게 한다.

 

 

3. 타입 매개변수는 타입 이기만 하면 모두 가능하다.

 

지금까지는 타입매개 변수로 int,string 와 같이 닷넷이 제공하는 타입을 사용했었다. 그러나
사실 이 타입매개변수에는 어떠한 타입이 전달되어도 된다.
(정의만 되어 있다면.. 그리고 제약조건이 없다면..) , 사용자가 만든 임의의 클래스도 Generics 클래스나 메서드의 타입으로 결정될수 있다. 아래의 코드는 타입 매개변수로 사용자가 정의한 TestClass 로 지정하는 예제이다.

 

class Program

{

        static void Main(string[] args)

        {

            TestClass tc = new TestClass();

            tc.x = 50;

            tc.y = 50;

           

            MyGenericClass<TestClass> mgc = new MyGenericClass<TestClass>();

            mgc.myValue = tc;

            Console.WriteLine(String.Format("x = {0} , y = {1}",

mgc.myValue.x, mgc.myValue.y));   

        }       

}

 

public class MyGenericClass<T>

{

       public T myValue;      

}

 

public class TestClass

{

        public int x;

        public int y;

}

이름
비밀번호
홈페이지
EW <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요