본문 바로가기
프로그래밍/c#

c#_48 일반화 Generalization <T>

by 지나팩 2022. 2. 11.

자료구조를 배우셨다면 아마 List<T>, Dictionary<T> 등 <T>라는 것을 접해보셨을 겁니다. 자료구조를 활용할 순 있지만 <T>가 무엇인지 모르고 쓰는 경우도 있으리라 생각이 듭니다. 저 역시 그런 경우였구요. 그래서 이 <T> 제너릭에 대해서 알아보고자 합니다.

 

보통 클래스를 만들게 되면 클래스에 포함된 모든 데이터들의 타입을 정해주게 됩니다. 아래 예제처럼 말이죠.

하지만 클래스의 역할에 따라선 일부 데이터들의 타입이 여러가지가 필요한 경우들이 있습니다. 예를 들어 정수형 타입 int를 매개 변수를 받아 더하는 함수가 포함된 클래스가 있다면 int 타입 외에는 처리를 할 수가 없습니다. 그렇다고 같은 역할을 하는 클래스를 하나 더 만드는 것도 낭비입니다. 
그래서 필요한 것이 바로 <T>입니다. 제너릭<T>를 통해서 매개 변수의 데이터 타입을 지정하지 않고 이 제너릭<T>타입 자체를 받도록 클래스를 정의합니다. 클래스를 생성 시 데이터 타입을 지정만 해주면 끝~ 하나의 클래스로 여러 데이터 타입을 처리할 수 있게 됩니다. 우리가 흔히 쓰는 자료구조 List와 Dictionary의 경우도 제너릭 클래스입니다. 그래서 우리가 원하는 다양한 데이터 타입을 추가할 수 있는거죠.
List나 Dictionary를 사용하는 것과 똑같죠? 이렇듯 하나의 기능을 하지만 여러 데이터 타입이 필요한 경우에 이 제너릭 타입<T>를 활용하시면 됩니다. 위 예제는 제너릭 클래스입니다. 메소드(함수)의 경우도 제너릭 타입을 통해 활용할 수 있습니다.

매개 변수도 여러 개 사용가능하며 일반화 타입도 여러 개 추가할 수 있습니다. Swap 메소드의 경우 각 타입별로 메소드 오버로딩를 통해 만들어야 하지만 일반화를 하게되면 여러 개의 메소드가 필요없이 하나만으로 해결이 됩니다. 주의해야할 점은 +, ==, *, / 등의 연산자들을 직접적으로 사용할 수 없습니다.

부족한 부분은 나중에 추가하도록 하겠습니다.

'프로그래밍 > c#' 카테고리의 다른 글

C#의 기본 자료형, 데이터 형식 DataTypes  (0) 2023.07.25
c#_49 델리게이트 , 델리게이트 체인 Delegate  (0) 2022.02.14
c#_47 ?. ?? Null 조건 연산자  (0) 2022.02.08
c#_46 삼항 연산자  (0) 2022.01.26
c#_as 연산자  (0) 2022.01.12

댓글