|
|
게시됨 2019. 1. 28. 오후 4:03:40
|
|
|
|

1. 제네릭이란 무엇인가요?
제네릭은 C# 2.0에서 도입된 새로운 구문으로, 구문 슈가가 아니라 2.0의 프레임워크 업그레이드로 제공된 기능들입니다.
프로그램을 프로그래밍할 때, 우리는 종종 매우 유사한 기능을 가진 모듈을 만나지만, 이들은 서로 다른 데이터를 처리합니다. 하지만 우리는 서로 다른 데이터 타입을 처리하기 위해 여러 메서드를 따로 작성할 수밖에 없습니다. 현재 질문은, 같은 방법을 사용해 다양한 매개변수를 다룰 수 있는 방법이 있느냐는 것입니다. 제네릭의 등장은 이 문제를 해결하기 위해 특별히 고안되었습니다.
2. 왜 제네릭을 사용하는가
다음 예를 살펴보겠습니다:
결과:
위 결과로 보아 이 세 방법은 매개변수가 다르지만 동일한 함수를 가진다는 것을 알 수 있습니다. 버전 1.0 당시에는 제네릭이라는 개념이 없었기에, 무엇을 해야 할지 고민했습니다. 많은 분들이 객체 객체 운영(OOP)의 세 가지 주요 기능 중 하나의 상속을 생각할 것이라 생각합니다. C#에서 객체는 모든 타입의 기본 클래스이며, 위 코드는 다음과 같이 최적화되어 있습니다:
결과:
위 결과를 보면, 객체 타입 사용이 요구사항을 충족하고 코드의 재사용성을 해결한다는 것을 알 수 있습니다. 어떤 사람들은 객체 타입으로 정의된 정수, 문자열 등을 왜 전달할 수 있는지 궁금해할 수 있습니다. 그 이유는 두 가지입니다:
1. 객체 타입은 모든 타입의 부모 클래스입니다.
2. 상속을 통해 서브클래스는 부모 클래스의 모든 속성과 동작을 가지며, 부모 클래스가 나타나는 곳마다 서브클래스로 대체할 수 있습니다.
하지만 위의 객체 타입 방식은 또 다른 문제를 야기합니다: 박스 처리와 언박스 처리가 프로그램의 성능을 저하시킬 수 있습니다.
마이크로소프트는 C# 2.0에서 제네릭 개념을 도입했는데, 이는 위 문제들을 매우 잘 해결할 수 있습니다.
3. 제네릭 타입 매개변수
제네릭 타입 또는 메서드 정의에서 타입 매개변수는 클라이언트가 제네릭 타입의 변수를 인스턴스화할 때 특정 타입에 대해 지정하는 자리 표시자입니다. 제네릭 클래스(GenericList<T>)는 진정한 타입이 아니기 때문에 그대로 사용할 수 없습니다; 오히려 타입의 설계도와 같아요. GenericList를 사용하려면 <T>클라이언트 코드가 괄호 안에 타입 매개변수를 지정하여 구성 타입을 선언하고 인스턴스화해야 합니다. 이 특정 클래스의 타입 인자는 컴파일러가 인식하는 어떤 타입이든 될 수 있습니다. 구성 타입 인스턴스를 여러 개 만들 수 있으며, 각각 다른 타입 파라미터를 가질 수 있습니다.
위 예시의 코드는 다음과 같이 수정할 수 있습니다:
콜:
결과:
|
이전의:.NET 코어 파일 제공자다음:MySQL 데이터베이스 이름, 테이블 이름, 필드 이름 조회
|