프로젝트를 만들다 보면, 비슷한 형태의 함수나 클래스의 인스턴스가 무수히 많아지게 됩니다.
이런 상황에서 설계자는 어떤 방향으로 프로젝트를 구성해야 할까요?
1) object 자료형
C#에는 모든 자료형의 부모 격인 object 타입이 존재합니다.
따라서 object 타입을 사용하면 모든 자료형을 사용할 수 있습니다.
이때 주의해야 할 것은 var와는 완전히 다른 방식으로 동작한다는 것입니다.
var는 C++의 auto 키워드처럼 컴파일러의 추론을 사용하지만, object는 말 그대로 자료형으로서 동작합니다.
그렇다면 object 타입을 사용한 예제를 한번 확인해보겠습니다.
위와 같이 object 타입을 인자로 받는 함수를 Main 함수에서 호출하면
다음의 실행결과를 얻을 수 있습니다.
잘 동작하는 것을 확인했으니, 이제 object 타입을 사용하면 되겠구나 라고 생각하실 수 있지만,
object 타입의 사용은 최대한 자제하는 것이 좋습니다.
object 타입은 복사가 아닌 참조로 동작하기에 연산이 매우 느릴 뿐더러
위와 같은 함수가 아닌 클래스의 경우에는 적용이 어렵기 때문입니다.
따라서 우리는 C++의 template과 비슷하지만 기능이 더 많은 C#의 Generic을 통해 상황을 해결할 수 있습니다.
2) Generic
기본적인 C++의 template과 비슷하게 동작합니다.
하지만 template보다 더 많은 기능을 포함하고 있는데 대표적으로 조건을 설정할 수 있다는 것입니다.
이외에도 더 많은 차이점이 있기에 template과 비교하여 기능은 더 많지만,
전체적인 맥락은 비슷하다고 생각하시면 됩니다. 아래의 링크에서 더 많은 정보를 확인하실 수 있습니다.
C++ 템플릿과 C# 제네릭의 차이점 - C#
C++ 템플릿과 C# 제네릭의 차이점을 알아봅니다. 둘 다 매개 변수가 있는 형식에 대한 지원을 제공하는 언어 기능입니다.
learn.microsoft.com
이제 Generic의 간단한 사용 예제들을 한번 알아보겠습니다.
3) Generic 사용예제
구성은 위와 같이 구성하였습니다.
이제 main함수에서 위의 Generic들을 활용해보겠습니다.
실행해보면
위와 같이 잘 실행되는 것을 확인할 수 있습니다.
프로젝트의 규모가 커질수록 설계자는 많아지는 함수와 클래스에 대응할 줄 알아야 합니다.
그런 상황에서 Generic을 통한 설계는 큰 도움을 줄 것입니다.
'C#' 카테고리의 다른 글
attribute와 reflection (0) | 2024.09.07 |
---|---|
C#의 예외처리 (0) | 2024.09.07 |
Nullable 키워드 (0) | 2024.08.31 |
프로퍼티 (0) | 2024.08.31 |
Interface (0) | 2024.08.25 |