2020. 1. 23. 20:32ㆍC# 언어/이것이 C# 이다. 연습문제
1. 다음 코드에서 문제를 찾고, 그 원인을 설명하세요.
Queue queue = new Queue();
queue.Enqueue(10);
queue.Enqueue("한글");
queue.Enqueue(3.14);
Queue<int> queue2 = new Queue<int>();
queue2.Enqueue(10);
queue2.Enqueue("한글"); // 오류 string 형
queue2.Enqueue(3.14); // 오류 float 형
컬렉션의 종류인 ArrayList, Queue, Stack은 Object형식으로 어떠한 형식도 담을 수 있다.
int, float, double 등등 모두 Object를 상속하고 있기 때문이다.
그러므로 비일반화 Queue 클래스에는
int, string, float 등이 값이 되어도 문제가 없다.
일반화 Queue<T>인 경우에는 그 형식(T)이 결정된다.
Queue<int>의 뜻은 int형 값만 가능하다.
그럼왜? 일반화 컬렉션을 사용하는 걸까?
앞서 말했던 것 처럼 Object형식으로 어떠한 형식을 담을 수 있는 반면
Box과 UnBoxing이 주기적으로 일어나기 때문에 성능 문제를 안고 있다.
(형식 변환이 주구장창 일어나기 때문..)
일반화 컬렉션은 사용할 형식이 결정되고, 쓸데없는 형식 변환이 일어나지 않는다.
또한 잘못된 형식의 객체를 담게 될 위험도 없다.
이러한 장점덕분에 일반화 컬렉션을 사용한다.
2. 다음 코드에서 1)에 들어갈 내용은 무엇입니까?
Dictionary</* 1)*/> dic = new Dictionary</* 1)*/>();
// Dictionary<string, string> dic = new Dictionary<string, string>();
// - 위에 들어간 string 형식을 넣어주면 된다.
dic["하나"] = "one";
dic["둘"] = "two";
dic["셋"] = "three";
dic["넷"] = "four";
dic["다섯"] = "five";
WriteLine(dic["하나"]);
WriteLine(dic["둘"]);
WriteLine(dic["셋"]);
WriteLine(dic["넷"]);
WriteLine(dic["다섯"]);
Hashtable의 일반화 클래스인 Dictionary<>이다.
그 기능과 사용법은 동일하지만 형식이 정해져있는 차이점이 있다.
지금은 string, string형식을 주었으나 사용법에 따라 달리 형식을 넣어야된다.
dic[1] = "one"; 이라면
Dictionary<int, string> 이렇게 사용될 형식에 따라서 넣어야된다.