2014년 11월 4일 화요일

30. [C#닷넷강좌]C# Generic(일반화 프로그래밍), TYPE T[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]

30. [C#닷넷강좌]C# Generic(일반화 프로그래밍), TYPE T
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
Generic이란클래스에 사용할 타입을 디자인시에 정하는 것이 아니라 클래스를 사용할 때 지정한 후 사용하는 기술이다.
 
예를 들어서 두수의 합을 구하는 sum(int i, int j) 메소드를 생각해 보자처음 설계할 때는 int형만 더 하는 관점에서 설계했지만 추후 float, double, long 다른 타입들의 합을 구하는 기능이 추가 된다고 생각해 보자매번 sum() 메소드를 오버로딩 시켜서 만든다는 것은 여간 불편한 일이 아닐 수 없다이러한 관점에서 도입된 프로그래밍 기법이 일반화(Generic)프로그래밍 기법이다.
 
제너릭은 형식 안전성을 위해서,캐스팅박싱(Boxing)과 언방식(UnBoxing)으로 인한 부하가 없다.
 
다음 예문을 보자.
 
- Object형을 매개변수로
class Onj {
             private Object data = null;
             public void SetData(Object data) { this.data = data; }
             public Object GetData() { return this.data; }
}
 
 
String str = oraclejavanew.kr;
Onj o = new Onj();
o.SetData(str);
String myStr = (String)o.GetData();
 
- Generic을 매개변수로
class Onj<T> {
             private T data = null;
             public void SetData(T data) { this.data = data; }
             public T GetData() { return this.data; }
//T라는 타입은 아직 결정되지 않았으며 사용시 결정하여 사용
}
 
String str = oraclejavanew.kr;
Onj<String> o = new Onj<String>();
o.SetData(str);
//Top<String>을 사용했으므로 GetData()메소드는 String을 리턴
String myStr = o.GetData();
 
스택 클래스를 보자.
 
//처음에는 int로 스택구성
class Stack{
             private int top = 0;
             private int[ ] ar = new int[10];
             public void Push(int i){
                           ar[top] = i;
                           top++;
             }
             public int Pop(){
                           top--;
                           return ar[top];
             }
}
 
//두번째는 string으로 스택구성
class Stack{
             private int top = 0;
             private string[ ] ar = new string[10];
             public void Push(string obj){
                           ar[top] = obj;
                           top++;
             }
             public string Pop(){
                           top--;
                           return ar[top];
             }
}
 
 
 
//세번째는 object로 스택구성
class Stack{
             private int top = 0;
             private Object[ ] ar = new Object[10];
             public void Push(Object obj){
                           ar[top] = obj;
                           top++;
             }
             public Object Pop(){
                           top--;
                           return ar[top];
             }
}
 
 
//Generic으로 스택 구성
 
class Stack<T>{
           private int top = 0;
           private T[ ] ar = new T[10];
           public void Push(T i){
                     ar[top] = i;
                     top++;
           }
           public T Pop(){
                     top--;
                     return ar[top];
           }
}
 
 
컬렉션의 제너릭 전환
 
일반 컬렉션 클래스
제너릭 클래스
ArrayList
List<T>
Hashtable
Dictionary<T>
SortedList
SortedDictionary<T>
Stack
Stack<T>
Queue
Queue<T>
 
 
List<T>
List<string> onj = new List<string>();
 
Dictionary<K, V>
Dictionary<string, string> onj = new Dictionary<string, string>();
onj.Add("name", "Onj");
 
SortedDictionary<K, V>
SortedDictionary<int, string> onj = new SortedDictionary<int, string>();
onj.Add(1, "오라클자바커뮤니티" );
 
 
[예제1, 일반화클래스]
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace GenericArray
{
    class MyArray<T> // T 형은 매개변수
    {
        private T[] onj;
 
        //onj 배열을 초기화
        public MyArray(int size)
        {
            onj = new T[size];
        }
 
        // onj 배열에 데이타를 저장한다.
        public void SetElement(int index, T value)
        {
            onj[index] = value;
        }
 
        // onj배열에 해당 index 데이터를 반환
        public T GetElement(int index, T value)
        {
            return onj[index];
        }
 
        // onj 모든 요소를 출력한다.
        public void PrintElements()
        {
            foreach (T o in onj)
            {
                Console.WriteLine(o);
            }
        }
    }
 
    class MainApp
    {
        public static void Main(string[] args)
        {
            //int 형을 매개 변수로 MyArray<T> 객체를 생성.
            MyArray<string> array = new MyArray<string>(4);
 
            array.SetElement(0, "OnjOracleJava");
            array.SetElement(1, "OracleJava Commmunity");
            array.SetElement(2, "oraclejavacommunity.com");
            array.SetElement(3, "oraclejavanew.kr");
 
            array.PrintElements();
        }
    }
 
}
 
 
[결과]
 
OnjOracleJava
OracleJava Commmunity
oraclejavacommunity.com
oraclejavanew.kr
 
 
[예제2, 일반화메소드]
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace GenericMethod
{
    class MainApp
    {
        static T[] GetArray<T>(int size, T val)
        {
            T[] array = new T[size];
 
            for (int i = 0; i < size; i++)
            {
                array[i] = val;
            }
 
            return array;
        }
 
        static void Main(string[] args)
        {
            string[] str_array = GetArray<string>(3, "오라클자바커뮤니티,오라클자바커뮤니티프로그래밍");
 
            foreach (string s in str_array)
                Console.WriteLine(s);
        }
    }
}
 
 
[결과]
 
오라클자바커뮤니티,오라클자바커뮤니티프로그래밍
오라클자바커뮤니티,오라클자바커뮤니티프로그래밍
오라클자바커뮤니티,오라클자바커뮤니티프로그래밍



 [진짜실무교육&환급100%]SQL/자바/스프링/안드로이드/닷넷C#/웹… 오라클자바…12-272362
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111710
53 [평일전액환급실무교육]Spring,자바&JSP,안드로이드,웹퍼블리싱,… 오라클자바…03-151524
52 [주말]C#,ASP.NET마스터 오라클자바…01-311632
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312099
50 [평일주간야간,주말]C기본&자료구조,알고리즘 오라클자바…01-311285
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191592
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111425
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031962
46 [진짜실무교육&환급100%]SQL/자바/스프링/안드로이드/닷넷C#/웹… 오라클자바…12-272362
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191692
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141667
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111710
42 [기업100%환급]웹퍼블리싱마스터(HTML5,CSS3,JavaScript,jQUERY) 오라클자바…12-091358
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011583
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-011761
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011237

댓글 없음:

댓글 쓰기