C#/배열과 리스트

[C#] 왜 object형식외에 다른 형식을 배울까?

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

지난 글([C#] 배열의 기본 자료형)에서 object[]배열은 모든 자료형을 저장할 수 있는 배열이라고 설명했다.

그런데, 모든 자료형을 저장할 수 있는데 왜 다른 형식을 배울까?

 

❓(Think)그럼 왜 object형식외에 다른 형식을 배울까?

1. 박싱(Boxing)과 언박싱(Unboxing)이 발생함

 

✔ object는 참조 타입이라서, 값 타입(int, double 등)을 저장할 때 박싱(Boxing)이 발생
✔ 박싱된 값을 다시 사용할 때 언박싱(Unboxing)이 필요
 성능이 떨어질 수 있음

 

📝 박싱과 언박싱 예제

object obj = 10;  // int → object (박싱)
int num = (int)obj;  // object → int (언박싱)

Console.WriteLine(num);  // 출력: 10

 

📌 박싱/언박싱이 많아지면 메모리와 성능이 비효율적


2. 타입 안전성이 떨어짐 (Type Safety 문제)

 

 object[] 배열은 모든 타입을 저장할 수 있지만, 타입 검사를 직접 해야 함
✔ 잘못된 타입 변환 시 런타임 오류 발생 가능


📝 잘못된 타입 변환 예제

object[] data = { 42, "Hello", 3.14 };

// int number = (int)data[1];  // ❌ 실행 오류 발생 (string을 int로 변환 불가)

 

📌 컴파일러가 타입 오류를 잡아주지 못하고 런타임에서 터짐


3. 제네릭(Generics)과 비교하면 유연성이 부족함

 

✔ List<T> 같은 제네릭 컬렉션을 사용하면 타입 안정성을 유지하면서도 유연하게 관리 가능
✔ object[] 대신 List<int>List<string> 등을 사용하는 게 일반적

 

📝 제네릭을 활용한 예제

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

Console.WriteLine(numbers[0]);  // 출력: 1

📌 제네릭을 사용하면 타입 변환 문제 없이 안전하게 사용할 수 있음

 

📖 결론: object[] 배열은 언제 사용할까?

 서로 다른 타입의 데이터를 한 곳에 저장해야 할 때
 제네릭을 사용하기 어려운 경우(참고: [C#] 제네릭을 사용하기 어려운 경우)
✔ 하지만, 일반적으로 제네릭을 사용하는 것이 더 안전하고 성능이 좋음

 

728x90