'명품 자바 에센셜 풀이' 시리즈명품 자바 에센셜 연습문제 7장(이론)

baealex

소비적인 일보단 생산적인 일을 좋아합니다.

Sign in to view email


문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.



연습문제 7장

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


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


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

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

① v.size()는 3을 리턴한다.
② 제네릭 벡터로부터 Integer 타입으로 구체화된 벡터를 생성하고 있다.
③ v.add(10)을 호출하여 정수 10을 벡터에 삽입할 수 있다.
④ 벡터 v에는 실수 값을 절대로 삽입할 수 없다.
0을 반환한다.


4. 다음 물음에 답하라.

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

HashMap<String, Double> hm = new HashMap<String, Double>;

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

Vector<String> v = new Vector<String>;

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

ArrayList<Circle> al = new ArrayList<Circle>;


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

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

intInteger로 변경하여야 한다. 컬렉션의 요소는 오직 객체만 사용된다.


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

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

Iterator<Integer> it = v.iterator();


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

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

2행의 3.5에서 자동 박싱이 발생하여 리스트에 삽입된다. 3행의 a.get(0)이 자동 언박싱되어 d에 대입된다.


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

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));

Iterator<Double> it = a.Iterator();
while(it.hasNext())
    System.out.println(it.next());


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

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

v.add("Good");
v.add("Bad");
System.out.println(v.size());
v.remove(1);


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

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

2행, 1 : String, Integer
2행, 2 : new HashMap<String,Integer>();
3행 : h.put("이몽룡", 25);
4행 : h.put("성충향", 18);
7행 : h.get(name);


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

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

(1) MyGeneric의 타입 매개 변수는 무엇인가? W

(2) x를 리턴하는 public 메소드 take()를 작성하라. public W take() { return x; }

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

public boolean compare(W x) {
    if(this.x.equals(x)) { return true; }
    else { return false; }
}

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

MyGeneric<String> mg = new MyGeneric<String>("SKYLINE");

생성된 문자를 확인할 수 있고, 생성된 문자와 다른 문자를 비교할 수 있다.


작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.