C#/배열과 리스트

[C#] 제네릭을 사용하기 어려운 경우

도도돋치 2025. 3. 26. 21:12
Contents 접기
728x90

지난 글([C#] 왜 object형식외에 다른 형식을 배울까?)에서 object[]배열은 제네릭을 사용하기 어려운 경우에 사용한다고 했다.

그렇다면 제네릭을 사용하기 어려운 경우는 언제일까?

 

런타임에 타입이 결정되는 경우

✔ 컴파일 타임에 타입을 알 수 없고, 런타임에서만 결정될 때
✔ 예를 들어, JSON 파일을 읽거나, Reflection을 사용할 때

 

📌 제네릭을 쓰려면 모든 타입을 미리 정해야 하지만, JSON 데이터를 받을 때는 타입이 다양할 수 있다

 

Reflection을 사용할 때

✔ C#의 Reflection을 사용하면 타입을 동적으로 다룰 수 있음
✔ 제네릭은 컴파일 타임에 타입이 정해져야 하지만, Reflection은 런타임에서 타입을 처리

 

더보기

Reflection(리플렉션)이란?

 

C# 프로그램이 런타임에 자기 자신을 검사하고 수정할 수 있도록 하는 기능
즉, 프로그램이 실행 중에 클래스, 메서드, 속성, 필드 등의 정보를 조회하거나 동적으로 객체를 생성하고 메서드를 실행할 수 있다

쉽게 말해, C# 코드가 "자기 자신을 들여다볼 수 있는 기능"

 

컬렉션에 여러 타입의 데이터를 넣어야 할 때

✔ 보통은 제네릭 컬렉션을 사용하지만, 여러 타입의 데이터를 한 곳에 저장해야 한다면 object[]가 필요할 수 있다

 

📝 예제

object[] row = { 1, "Jang Dochi", 25, true };  

Console.WriteLine($"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}, Active: {row[3]}");

 

📌 테이블 형태의 데이터를 다룰 때, 각 열의 타입이 다르면 object[]를 사용할 수밖에 없다

 

 

📖 정리

제네릭은 강력하지만, 런타임에 타입이 결정되는 경우 다양한 타입을 다뤄야 할 때 object object[]를 사용할 수밖에 없다
하지만 일반적인 경우에는 제네릭을 쓰는 것이 더 안전하고 성능이 좋다

 

 

 

 

728x90