라이프로그


제네릭 클래스 메서드 컬렉션 -C# & ASP.NET 2.0

아래내용은 한빛미디어에서 출판된 조성진님의
ASP.NET 2.0 웹프로젝트와 실전 프로그래밍 의 내용을
참고하여 글을 썼습니다.

우연히 마소에서 제네릭이라는 것에 대하여 소개를 했던 기억이 있습니다.
그땐 이게 머지? 하며 그냥 넘어갔는데.

다시 제네릭이라는것을 접하게 되었습니다.
제네릭 컬렉션
제네릭 클래스
제네릭 메서드

우선 다음과 같은 코드의 소스가 있다고 하면은

ArrayList items = new ArrayList();

items.Add("문자열");
items.Add(200);

foreach(string val in items)
    Response.Write(val + "<br>");

이코딩은 두가지 문제점이 있습니다.
첫번째 문제점은 이렇게 코딩이 되어있다면 컨파일을 하는 중에는 에러가 생기지 않습니다.
하지만 실행 시에 에러가 발생합니다.
200 이라는 숫자가 ArrayList 에 들어가기 때문에
foreach 문이 실행중에 숫자를 string 형으로
변환하려고 하는중에 발생되는 에러입니다.
컴파일시에 에러가 발견되지 않고 실행을 해보고 나서야
에러가 발견된다는 것은 소프트웨어의 생산 능률을
저하시키는 요인이 될 수 있습니다.

두번째 문제점은 형식 변환으로 인한 퍼포먼스의 저하입니다.
ArrayList는 저장하는 모든 개체를 object 형식으로 변환하기 때문에
저장될때 형변환이 발생하고, 특히 int형을 object형으로 변환할 때 필요한
박싱(boxing) 처리가 수행되기 때문에 더 부담이 큽니다.
또한 다시 object 형을 string 형으로 다시 바꾸는 역변환이 발생합니다.
위 예제처럼 간단한 처리에는 표시가 나지않지만
ArrayList에 저장되는 데이터가 많아질 경우에는 반복적인 형변환과
박싱/언박싱 처리가 퍼포먼스에 치명적인 결함을 가져올 수 있습니다.

제네릭 컬렉션을 사용한 다른경우를 보면

System.Collections.Generic.List<int> values = new System.Collections.Generic.List<int>();


values.Add(100);
values.Add(200);

foreach(int val in values)
    Response.Write(val.ToString() + "<br>");

System.collections.Generic 네임스페이스에 있는 List<T> 클래스는
ArrayList 클래스의 제네릭 버젼입니다.

ArrayList 클래스는 모든 형식의 데이터를 object 형식으로 저장하는 반면
List<T> 클래스는 T에 지정된 형식의 데이터를 저장합니다.
T 자리에는 모든 데이터 형식이 지정될 수 있습니다.

List<string> oVar1;
List<DataTime> oVar2;
List<char> oVar3;
List<UserDefinedType> oVar4;   // UserDefineType은 사용자 정의 클래스 이름

위의 소스에서는 List<int> 라고 선언했으므로 형변환이나 박싱/언박싱이
발생되지 않습니다.
또한 만일 values.Add("텍스트") 라는 코드를 추가하면 컴파일 시간에 에러를
발견할수 있습니다.
이렇게 제네릭을 이용하면 모호한 형식에 의해 발생하는 결함들을
근본적으로 제거할 수 있습니다.

제네릭 컬렉션의 클래스들

.NET 1.x 컬렉션  /  .NET 2.0에 추가된 제네릭 컬렉션

ArrayList               /   List<T>

Hashtable             /   Dicrionary<TKey, TValue>

                                SortedDictionary<TKey, TValue>

SortedList             /   SortedList<TKey, TValue>

Queue                  /   Queue<T>

Stack                   /    Stack<T>


이와같이 제네릭 메서드 나 제네릭 클래스를 정의 할수있습니다.
제네릭 메서드 또는 클래스로 코드를 작성하면 컴파일러는
각형식의 메서드 또는 클래스가 정의 된것처럼 컴파일할 겁니다.

void MethodName<T>(T parm)
{
    Response.Write(parm.GetType().ToString();
}

MethodName<int>(10);
MethodName<string>("문자열")

위와 같이 되어있으면 컴파일러는 < 와 > 안에 지정한 형식과 일치하는 두종류의
메서드가 정의된 것처럼 컴파일 합니다.

void MethodName(int parm)
{
    Response.Write(parm.GetType().ToString());
}

void MethodName(string parm)
{
    Response.Write(parm.GetType().ToString());
}

또한 제네릭 메서드는 둘이상의 형식 매개 변수를 정의 할수있습니다.
void MethodName<T1, T2>(T1 parm1, T2 parm2)
{
    ...
}

그리고 제네릭 메서드는 좀더 편한 방법으로 호출할 수 있습니다.
MethodName(10, "문자열");
MethodName( "문자열", DateTime.Now);

이렇게 형식 매개 변수를 생략하고 호출하면, 메서드로 전달된 인자의 형식에 따라
컴파일러가 형식 매개 변수를 추론해서 생성합니다.


핑백

  • 블로그를 살리자~!!! : C# 2.0 에서 추가된 사항들 2007-11-15 21:21:55 #

    ... 봅니다. 제네릭 : 클래스나 메서드 정의 코드에서 데이터 형식이 결정되지 않고 형식 매개 변수에 따라 컴파일 시에 실제 형식이 결정된다. http://redrebel.egloos.com/3936385 반복기 : foreach에서 사용 하는 IEnumerable과 IEnumerator 인터페이스를 자동으로 구현해 준다. Nullab ... more

덧글

  • 두바이 2016/04/06 20:30 # 삭제 답글

    두바이출장업소,두바이출장샵 dubai31.net 빠른예약 ka톡:du b ai 888 ♬


    <img alt="dubai31.jpg" src="http://www.medwide.net/files/attach/images/2449760/546/199/009/4901706146f1aabb66461f0f8bc70bc8.jpg">


    대박이벤트!!!!국내 스피드 유일 출장전문업계~!!!
    빨아주기 필수+(핸 플+1)+얼굴에 사정가능+횟수무관...
    싼 가격으로 오랫동안 즐기는...
    섹시녀와 만남 하루한명 남성전용 쎅파 소개팅
    장소만 알려주시면 직접 찾아가는 서비스~
    착한 가격에 지방까지 고고..일일대기 !~


    자세한 문의는 ka톡"d.u,b.a,i.888


    [19금] http://www.dubai31.net


    상담환영 친절히 답해드려요!
    답변이 늦을 수있는점 양해 부탁드립니다


    모두의<두,바,이,출,장,샵> 입니다
    두바이의 현재 주소는 d u b a i 3 1 . n e t 입니다
    두바이의 다음 주소는 d u b a i 3 2 . n e t 입니다
    그러타면 그 다음주소는??
    d u b a i 3 3 . n e t 입니다 ^^

    이는, 추후에 저희 사이트가 블라인드 되었을 경우
    뒤에 숫자만 계속 변경하시면 됩니다 위의 사이트로 오시면
    정상적으로 사이트를 이용하실 수 있습니다
    틱ka톡:d.u,b.a,i.888 ♬
    트위터로 오시면 수시로 바뀔 수 있는 저희 사이트의 실시간정보를
    보실 수 있습니다.
  • 두바이 2016/04/06 20:30 # 삭제 답글

    두바이출장업소,두바이출장샵 dubai31.net 빠른예약 ka톡:du b ai 888 ♬


    <img alt="dubai31.jpg" src="http://www.medwide.net/files/attach/images/2449760/546/199/009/4901706146f1aabb66461f0f8bc70bc8.jpg">


    대박이벤트!!!!국내 스피드 유일 출장전문업계~!!!
    빨아주기 필수+(핸 플+1)+얼굴에 사정가능+횟수무관...
    싼 가격으로 오랫동안 즐기는...
    섹시녀와 만남 하루한명 남성전용 쎅파 소개팅
    장소만 알려주시면 직접 찾아가는 서비스~
    착한 가격에 지방까지 고고..일일대기 !~


    자세한 문의는 ka톡"d.u,b.a,i.888


    [19금] http://www.dubai31.net


    상담환영 친절히 답해드려요!
    답변이 늦을 수있는점 양해 부탁드립니다


    모두의<두,바,이,출,장,샵> 입니다
    두바이의 현재 주소는 d u b a i 3 1 . n e t 입니다
    두바이의 다음 주소는 d u b a i 3 2 . n e t 입니다
    그러타면 그 다음주소는??
    d u b a i 3 3 . n e t 입니다 ^^

    이는, 추후에 저희 사이트가 블라인드 되었을 경우
    뒤에 숫자만 계속 변경하시면 됩니다 위의 사이트로 오시면
    정상적으로 사이트를 이용하실 수 있습니다
    틱ka톡:d.u,b.a,i.888 ♬
    트위터로 오시면 수시로 바뀔 수 있는 저희 사이트의 실시간정보를
    보실 수 있습니다.
  • 두바이 2016/04/06 20:31 # 삭제 답글

    두바이출장업소,두바이출장샵 dubai31.net 빠른예약 ka톡:du b ai 888 ♬


    <img alt="dubai31.jpg" src="http://www.medwide.net/files/attach/images/2449760/546/199/009/4901706146f1aabb66461f0f8bc70bc8.jpg">


    대박이벤트!!!!국내 스피드 유일 출장전문업계~!!!
    빨아주기 필수+(핸 플+1)+얼굴에 사정가능+횟수무관...
    싼 가격으로 오랫동안 즐기는...
    섹시녀와 만남 하루한명 남성전용 쎅파 소개팅
    장소만 알려주시면 직접 찾아가는 서비스~
    착한 가격에 지방까지 고고..일일대기 !~


    자세한 문의는 ka톡"d.u,b.a,i.888


    [19금] http://www.dubai31.net


    상담환영 친절히 답해드려요!
    답변이 늦을 수있는점 양해 부탁드립니다


    모두의<두,바,이,출,장,샵> 입니다
    두바이의 현재 주소는 d u b a i 3 1 . n e t 입니다
    두바이의 다음 주소는 d u b a i 3 2 . n e t 입니다
    그러타면 그 다음주소는??
    d u b a i 3 3 . n e t 입니다 ^^

    이는, 추후에 저희 사이트가 블라인드 되었을 경우
    뒤에 숫자만 계속 변경하시면 됩니다 위의 사이트로 오시면
    정상적으로 사이트를 이용하실 수 있습니다
    틱ka톡:d.u,b.a,i.888 ♬
    트위터로 오시면 수시로 바뀔 수 있는 저희 사이트의 실시간정보를
    보실 수 있습니다.
  • 두바이 2016/04/17 01:46 # 삭제 답글


    과,중,한, ,스,트,레,스,와,
    우,울,증,.,,기,분,전,환,에, ,쎅,스,는, ,최고,죠,~,
    ,2,0,대, ,초,반, ,중,반, ,언,,니,,,들, ,2,4,시, 완,벽,준,비,~,!,!
    ,서,비,스,-,S,M노,예,/,컨,셥,놀,이,/,입사,/,질,사,,,/,안,,.,마,등,등,

    장,소,만, ,알,려,주,시,면, ,직,접, ,찾,아가,는, ,서,,비,스,~,
    ,착한 ,가,,,격,에 ,지,방,까,지, ,고,고,.,.,일,일,,대,,기 !~

    ,자,세,한, ,문,의는, ,톡,",d,.,u,,,b.,,a,,,,i,.,,8,8,8

    [,,1,9,금,], ,d,u,b,a,,i,3,4,.n,e,,,t

    ,상,담,환,영, ,친,절,히, ,답,해드,려,요,!,
    답,변,이, ,늦,을, ,수,있,는,점, ,양,해, ,부,탁,드,립,,니,다

    <img alt="dubai34.jpg" src="http://www.medwide.net/files/attach/images/2858877/360/337/009/765ff3af4def6f0aae7642644fa24e4f.jpg">
  • 두바이 2016/04/29 00:12 # 삭제 답글


    과,중,한, ,스,트,레,스,와,
    우,울,증,.,,기,분,전,환,에, ,쎅,스,는, ,최고,죠,~,
    ,2,0,대, ,초,반, ,중,반, ,언,,니,,,들, ,2,4,시, 완,벽,준,비,~,!,!
    ,서,비,스,-,S,M노,예,/,컨,셥,놀,이,/,입사,/,질,사,,,/,안,,.,마,등,등,

    장,소,만, ,알,려,주,시,면, ,직,접, ,찾,아가,는, ,서,,비,스,~,
    ,착한 ,가,,,격,에 ,지,방,까,지, ,고,고,.,.,일,일,,대,,기 !~

    ,자,세,한, ,문,의는, ,톡,",d,.,u,,,b.,,a,,,,i,.,,8,8,8

    [,,1,9,금,], ,d,u,b,a,,i,3,4,.n,e,,,t

    ,상,담,환,영, ,친,절,히, ,답,해드,려,요,!,
    답,변,이, ,늦,을, ,수,있,는,점, ,양,해, ,부,탁,드,립,,니,다

    <img alt="dubai34.jpg" src="http://www.medwide.net/files/attach/images/2858877/360/337/009/765ff3af4def6f0aae7642644fa24e4f.jpg">
  • 두바이 2016/04/29 00:13 # 삭제 답글


    과,중,한, ,스,트,레,스,와,
    우,울,증,.,,기,분,전,환,에, ,쎅,스,는, ,최고,죠,~,
    ,2,0,대, ,초,반, ,중,반, ,언,,니,,,들, ,2,4,시, 완,벽,준,비,~,!,!
    ,서,비,스,-,S,M노,예,/,컨,셥,놀,이,/,입사,/,질,사,,,/,안,,.,마,등,등,

    장,소,만, ,알,려,주,시,면, ,직,접, ,찾,아가,는, ,서,,비,스,~,
    ,착한 ,가,,,격,에 ,지,방,까,지, ,고,고,.,.,일,일,,대,,기 !~

    ,자,세,한, ,문,의는, ,톡,",d,.,u,,,b.,,a,,,,i,.,,8,8,8

    [,,1,9,금,], ,d,u,b,a,,i,3,4,.n,e,,,t

    ,상,담,환,영, ,친,절,히, ,답,해드,려,요,!,
    답,변,이, ,늦,을, ,수,있,는,점, ,양,해, ,부,탁,드,립,,니,다

    <img alt="dubai34.jpg" src="http://www.medwide.net/files/attach/images/2858877/360/337/009/765ff3af4def6f0aae7642644fa24e4f.jpg">
댓글 입력 영역