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
'C# > 배열과 리스트' 카테고리의 다른 글
[C#] 반복문을 활용한 배열접근 (0) | 2025.04.01 |
---|---|
[C#] 배열 요소 접근, 배열의 범위 (0) | 2025.04.01 |
[C#] 제네릭을 사용하기 어려운 경우 (0) | 2025.03.26 |
[C#] 배열의 기본 자료형 (0) | 2025.03.26 |
[C#] 배열의 개념 (0) | 2025.03.26 |