이것이 C# 이다. 11장 연습문제

2020. 1. 23. 20:32C# 언어/이것이 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> 이렇게 사용될 형식에 따라서 넣어야된다.

반응형