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


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



연습문제 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");

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


이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.