# 명품 자바 에센셜 연습문제 7장(이론)

- Author: @baealex
- Published: 2018-11-02
- Updated: 2018-11-02
- Source: http://blex.me/@baealex/%EB%AA%85%ED%92%88-%EC%9E%90%EB%B0%94-%EC%97%90%EC%84%BC%EC%85%9C-%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C-7%EC%9E%A5%EC%9D%B4%EB%A1%A0
- Tags: 자바에센셜

---

<div class="txc-textbox" style="border-style: solid; border-width: 1px; border-color: rgb(254, 254, 184); background-color: rgb(254, 254, 184); padding: 10px;">
<p>문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
        바랍니다.<br/></p>
</div>

#### 연습문제 7장

1. 컬렉션에 대한 설명 중 잘못된 것은? 
 ① 컬렉션은 배열과 달리 객체들만 삽입 가능하다. 
 ② 컬렉션에는 Vector<E>, ArrayList<E>,
 LinkedList<E>, HashMap<K, V>, Stack<E> 등이 있다. 
 ③ 컬렉션 클래스는 모두 제네릭(generics)으로 만들어져 있다. 
 <font color="#ff0000">④ 배열처럼 저장하는 요소의 개수가 고정되어 있다.<br/></font> <span style="color: rgb(34, 116, 28);">크기를 자동으로 조절하고
 추가, 삭제, 검색등을 할 수 있다.</span>

2. 제네릭에 대한 설명 중 틀린 것은? 
 ① 제네릭은 클래스, 인터페이스, 메소드를 특정 타입에 종속되지 않게 일반화시키는 기술이다. 
 <span style="color: rgb(255, 0, 0);">②
 제네릭 클래스 등을 이용하여 응용 프로그램을 작성하는 기법을 제네릭 프로그래밍이라고 하며 최근에는 잘 활용되지 않는 추세이다.</span> 
 ③ Vector<E>에서 E를 제네릭 타입
 혹은 타입 매개 변수라고 부른다. 
 ④ Vector<E>에서 E에 Integer 등 구체적인 타입을 지정하여 사용해야 한다.

3. 다음 코드에 대한 설명으로 틀린 것은?

```java
Vector<integer> v = new Vector<integer>(3);
```

<span style="color: rgb(255, 0, 0);">① v.size()는 3을 리턴한다.</span> 
 ② 제네릭 벡터로부터 Integer 타입으로 구체화된 벡터를 생성하고 있다. 
 ③
 v.add(10)을 호출하여 정수 10을 벡터에 삽입할 수 있다. 
 ④ 벡터 v에는 실수 값을 절대로 삽입할 수 없다. 
 <span style="color: rgb(34, 116, 28);">0을
 반환한다.</span>

4. 다음 물음에 답하라.

(1) '키'는 문자열이고 '값'이 Double 타입인 HashMap 객체를 생성하는 코드는?

<span style="color: rgb(34, 116, 28);">HashMap&lt;String, Double&gt; hm = new HashMap&lt;String, Double</span> <span style="color: rgb(34, 116, 28);">&gt;;</span>

(2) String 타입으로 구체화한 Vector를 생성하는 코드는?

<span style="color: rgb(34, 116, 28);">Vector&lt;String&gt; v = new Vector&lt;String&gt;;</span>

(3) Circle 클래스의 객체만 저장할 수 있는 ArrayList 객체를 생성하는 코드는?

<span style="color: rgb(34, 116, 28);">ArrayList&lt;Circle</span> <span style="color: rgb(34, 116, 28);">&gt; al</span> <span style="color: rgb(34, 116, 28);"> = new ArrayList&lt;Circle&gt;;</span>

5. 다음 코드에서 잘못된 부분을 지적하고 이유를 설명하라.

```java
Vector<int> v = new Vector<int>(100);
```

<span style="color: rgb(34, 116, 28);">int</span> <span style="color: rgb(34, 116, 28);">를 </span> <span style="color: rgb(34, 116, 28);">Integer</span> <span style="color: rgb(34, 116, 28);">로 변경하여야 한다. </span> <span style="color: rgb(34, 116, 28);">컬렉션의 요소는 오직 객체만
 사용된다.</span>

6. 다음에서 벡터 v의 Iterator 객체를 얻어내는 간단한 코드는 무엇인가?

```java
Vector<integer> v = new Vector<integer>();
_____________________________
```

<span style="color: rgb(34, 116, 28);">I</span> <span style="color: rgb(34, 116, 28);">terator&lt;Integer&gt; it =
 v.iterator();</span>

7. 다음에서 자동 박싱/언박싱이 일어나는 곳을 지적하라.

```java
ArrayList<Double> a = new ArrayList<Double>();
a.add(3.5);
double d = a.get(0);
```

<span style="color: rgb(34, 116, 28);">2행의 3.5에서 자동 박싱이 발생하여 리스트에 삽입된다. 3행의 a.get(0)이 자동 언박싱되어 d에 대입된다.</span>

8. 다음 프로그램은 ArrayList에 0에서 100 사이의 임의의 실수를 20개 삽입하고 이들을 모두 출력하는 코드이다. 밑줄 친 부분(6, 7행)을 Iterator를 이용하여 수정하라.

```java
ArrayList<Double> a = new ArrayList<Double>();
for(int i=0; i<20; i++) {
    double d = Math.random()*100;
    a.add(d);
}
for(int i=0; i<20; i++)
    System.out.println(a.get(i));
```

<span style="color: rgb(34, 116, 28);">Iterator&lt;Double&gt; it = a.</span> <span style="color: rgb(34, 116, 28);">Iterator();</span> 
 <span style="color: rgb(34, 116, 28);">while(it.hasNext()</span> <span style="color: rgb(34, 116, 28);">)</span> 
 <span style="color: rgb(34, 116, 28);">    System.out.println(it.next()</span> <span style="color: rgb(34, 116, 28);">);</span>

9. 다음 Vector에 대해 빈칸에 적절한 코드를 채워라

```java
Vector<String> v = new Vector<String>();
_________________ // v에 "Good" 삽입
_________________ // v에 "Bad" 삽입
_________________ // v에 현재 삽입된 문자열 개수 출력
_________________ // v의 인덱스 1에 있는 "Bad" 문자열 삭제
```

<span style="color: rgb(34, 116, 28);">v.add("Good");</span> 
 <span style="color: rgb(34, 116, 28);">v.add("Bad");</span> 
 <span style="color: rgb(34, 116, 28);">System.out.println(</span> <span style="color: rgb(34, 116, 28);">v.size());</span> 
 <span style="color: rgb(34, 116, 28);">v.remove(1);</span>

10. 다음 HashMap에 대해 빈칸에 적절한 코드를 채워라.

```java
// 사람 이름을 키로 하고 나이를 값으로 다루는 해시맵 생성
HashMap<________> h = ___________ // 해시맵 생성
_______________ // h에 "이몽룡" 나이 25 저장
_______________ // h에 "성춘향" 나이 18 저장
Scanner scanner = new Scanner(System.in);
String name = scanner.next(); // 사용자로부터 이름 입력
Integer age = ___________ // h에서 name의 나이 검색
```

2행, 1: <span style="color: rgb(34, 116, 28);">String, Integer</span> 
 2행, 2: <span style="color: rgb(34, 116, 28);">new
 HashMap&lt;String,Integer&gt;();</span> 
 3행: <span style="color: rgb(34, 116, 28);">h.put</span> <span style="color: rgb(34, 116, 28);">("이몽룡",
 25);</span> 
 4행: <span style="color: rgb(34, 116, 28);">h.put</span> <span style="color: rgb(34, 116, 28);">("성충향",
 18);</span> 
 7행: <span style="color: rgb(34, 116, 28);">h.get</span> <span style="color: rgb(34, 116, 28);">(name);</span>

11. 다음 제네릭 클래스에서 4개의 문항에 대해 답하라.

```java
class MyGeneric<W> {
    private W x;
    public MyGeneric(W x) {
        this.x = x;
    }
    __________ // (2) 여러 줄로 작성 가능
    __________ // (3) 여러 줄로 작성 가능
```

(1) MyGeneric의 타입 매개 변수는 무엇인가? <span style="color: rgb(34, 116, 28);">W</span>

(2) x를 리턴하는 public 메소드 take()를 작성하라. <span style="color: rgb(34, 116, 28);">public W take() { return x; }</span>

(3) 매개 변수를 하나 가진 compare() 메소드를 작성하라. compare는 매개 변수와 x를 비교하여 같으면 true, 아니면 false를 리턴한다.

<span style="color: rgb(34, 116, 28);">public boolean </span> <span style="color: rgb(34, 116, 28);">compare(W x) {</span> 
 <span style="color: rgb(34, 116, 28);">    if(this.x.equals(</span> <span style="color: rgb(34, 116, 28);">x)</span> <span style="color: rgb(34, 116, 28);">) { return true; }</span> 
 <span style="color: rgb(34, 116, 28);"> 
   else { return false; }</span> 
 <span style="color: rgb(34, 116, 28);">}</span>

(4) String으로 구체화한 MyGeneric 객체를 생성하고 활용 예를 들어라.

<span style="color: rgb(34, 116, 28);">MyGeneric&lt;String</span> <span style="color: rgb(34, 116, 28);">&gt; mg =
 new MyGeneric&lt;String&gt;("SKYLINE");<br/></span>

<font color="#22741c">생성된 문자를 확인할 수 있고, 생성된 문자와 다른 문자를 비교할 수 있다.</font>
