YangDK
개발 공부
YangDK
전체 방문자
오늘
어제
  • 개발 공부 시작 (22)
    • GitHub (2)
    • JAVA (1)
    • 시스템 프로그래밍(윈도우) (1)
    • C# (6)
    • 자바스크립트 (1)
    • 프로젝트 제작 (1)
    • 연습 프로젝트 (2)
    • HTTP (1)
    • 타입스크립트 (0)
    • 오류 해결 (0)
    • React (1)
    • 컴퓨터 구조 (1)
    • 자료구조 & 알고리즘 (1)
    • HTML (1)
    • CSS (1)
    • 프로그래머스 (1)
    • IT 기기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Page
  • GiGABYTE
  • 웹 개발 공부
  • 프로그래머스
  • 기가바이트
  • b650
  • b650m k
  • 메인보드
  • css
  • Front-end
  • landing
  • 프론트엔드
  • programmers
  • dashboard
  • LandingPage
  • 자료구조
  • Big O
  • 빅오
  • Dev-Matching
  • 메인화면

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
YangDK

개발 공부

C#

Generic(일반화)

2021. 5. 14. 13:06

프로젝트를 진행하는데 있어 필요한 형식(int, float형)마다 class를 만들어서 사용해야 할 경우가 있다.

하지만 필요에 따라 각 형식의 class를 만드는 것은 코드가 길어지고 이후 변경하기 번거로운 단점이 있다.

 

이 상황을 대비헤 다른 방법이 무엇이 있는지 알아본다.

 

1. 모든 타입을 사용할 수 있는 object 타입을 사용하는 것이다.

=> object obj = 3;

     object obj2 = "Hello";

     

     int num = (int)obj;   // 결과 '3'

     string str = (string)obj2;   //결과 'Hello'

object 타입은 어느 타입이든 사용할 수 있다는 장점이 있다.

 

* 이와 비슷한 var를 사용할 수도 있다, 단 var의 경우 object와는 전혀 다른 성질은 지닌다.

=> object obj = 3;

     object obj2 = "Hello";와

 

     var obj = 3;

     var obj2 = "Hello";의 컴파일 후 출력된 값은 동일하지만 var의 경우 컴파일 시 오른쪽에 지정된 값을 보고

     컴파일러가 해당 타입을 유추하여 값을 출력하고,

     object의 경우에는 처음부터 object 타입이라고 명시되어 저장 및 출력이 된다.

 

object 타입이 이와 같이 다른 타입(int, float형)을 모두 선언 받을 수 있는 이유는 '상속'때문이다.

최상위 부모 클래스에 있는 것을 하위(자식) 클래스가 '상속' 받아 사용할 수 있는데,

int형과 float형과 같은 경우 object 타입을 상속받기 떄문에 object 타입이 포함하고 있는 타입을

소화할 수 있는 것이다. 

단 object 타입의 경우 처리 속도가 상대적으로 느리다.

 

2. 일반화 방식을 사용한다.(Generic)

=> class 사용 방법

class MyArr<T>    // class 이름 지정 후 <>를 사용하여 추가로 이름을 선언해준다.(템플릿, 타입이라는 뜻으로

                            T라는 이름을 자주 사용한다.)

class MyArr<T>

{

       T[] arr = new T[5];     //'T'타입의 일반화를 사용하고 'T'형태의 배열을 생성한다.

}

 

static void main(string args)

{

      MyArr<int> myint = new MyArr<int>();

      MyArr<float> myfloat = new MyArr<float>();    // MyArr의 일반화로 생성한 배열을 사용하고자 하는 타입에 맞춰

                                                                        뽑아서 쓸 수 있다.

}

 

=> 함수 사용 방법

static void Test<T>(T input)       // 'T'타입의 일반화를 사용함과 동시에 'T'형태로 인자를 받음으로 모든 타입의 인자를

                                               받고 값을 출력할 수 있다.

 

static void main(string args)    

{

      Test<int>(1);

      Test<float>(2.0f);           // 사용하고자 하는 타입을 지정한 후 값을 선언해주어 사용할 수 있다.

}

 

* Generic(일반화)에 조건 추가하기

class MyArr<T> where T : class   // where T : 조건을 입력한다.

=> 어느 'T'값이던 상관 없지만 조건에 맞는 'T'의 값만을 받겠다는 선언이다.

위의 조건의 경우 참조 형식의 T값만을 받겠다는 의미이다.

'C#' 카테고리의 다른 글

객체지향  (0) 2021.05.14
추상클래스, 인터페이스  (0) 2021.05.14
Dictionary  (0) 2021.05.13
다차원 배열  (0) 2021.05.13
배열  (0) 2021.05.12
    'C#' 카테고리의 다른 글
    • 객체지향
    • 추상클래스, 인터페이스
    • Dictionary
    • 다차원 배열
    YangDK
    YangDK

    티스토리툴바