본문 바로가기

bitcamp/면접족보

면접족보 20/12/21_제네릭, 컬렉션 프레임워크

1. 제네릭 클래스의 타입 인자 제한하는 방법과 효과는?

· 상속 및 구현 관계를 이용하여 타입을 제한한다. (extends 키워드 사용)
· 인스턴스 생성 시 타입 인자로 상위클래스인 Number 혹은 이를 상속하는 class만 접근 가능하다.
· 타입 인자를 제한하기 전(Object)에는 어떤 타입이든 받아들이지만, 타입을 제한함으로써 사전에 오류를 방지한다.

· 타입 인자를 인터페이스로도 제한이 가능하며, 상속과 인터페이스 동시 제한도 가능하다.

 

 

2. 아래를 참고하여 출력값이 나오도록 프로그래밍 하시오.

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 class DBox <F, N> {
    private F fruit;
    private N num;
    
    public void set(F f, N n) {
        fruit = f;
        num = n;
    }
    @Override
    public String toString() {        
        return fruit + " & " + num;
    }
 }
 
 class DDBox<F2, N2>{
    private F2 fruit2;
    private N2 num2;
    
    public void set(F2 f2, N2 n2) {
        fruit2 = f2;
        num2 = n2;
    }
    @Override
    public String toString() {
        super.toString();
        return fruit2 + "\n" + num2;
    }
 }
cs

 

 

3. 아래를 참고하여 출력값이 나오도록 프로그래밍 하시오.

· 참고

 

 

· 작성

1
2
3
4
5
6
7
8
9
10
 class Box<T> {
    private T ob;
    
    public void set(T o) {
        ob = o;
    }
    public T get() {
        return ob;
    }
 }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 class Boxmain {
    public static void main(String[] args) {
        Box<Integer> box1 = new Box<>();
        box1.set(99);
 
        Box<Integer> box2 = new Box<>();
        box2.set(55);
 
        System.out.println(box1.get() + " & " + box2.get());
        swapBox(box1, box2);
        System.out.println(box1.get() + " & " + box2.get());
    }
 
    public static void swapBox(Box<Integer> box1, Box<Integer> box2) {
        int temp = 0;
        temp = box1.get();
        box1.set(box2.get());
        box2.set(temp); 
    }
 }
cs

 

 

4. 제네릭 메소드에 대하여 설명하시오.

· 제네릭은 클래스 전부가 아닌 함수에도 사용가능하며 이를 제네릭 메소드라 명칭한다.

· ex) public static <T> Box<T> makeBox(T o), 매개변수 타입과 리턴 타입으로 타입파라미터를 갖는 메소드
· 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드이며, 메소드 리턴 타입 앞에 명시해준다.

 

 

5. 와일드카드와 상한 제한, 하한 제한에 대하여 설명하시오. 

· 아래의 예시와 같이 타입 파라미터를 대치하는 타입으로, <>안에 Integer, String을 인자로 전달 가능하다.

 

상한제한: 전달되는 인스턴스의 T는 Number 또는 이를 상속하는 자식클래스

 

하한제한: 하위타입이나 하위타입의 상위타입 접근 가능, 즉 Integer, Number, Object로 제한

 

 

6. 아래가 오류가 발생하는 이유를 설명하시오.

· super Toy는 Plastic인데, Toy의 상위클래스이므로, 자식 = 부모는 성립되지 않아 넣는 것은 가능하지만, 

  꺼내는 것은 불가능하다. (다형성이 적용되지 않음)

 

 

7. 아래와 같이 메소드 오버로딩이 되지 않는 이유는?

· 컴파일 과정에서 <...> 내부 내용은 소실되므로 메소드 오버로딩이 허용되지 않는다.

 

 

8. 아래를 참고하여 출력값이 나오도록 프로그래밍 하시오.

· 참고

 

· 작성

1
2
3
4
5
6
7
8
9
10
 class Box<T> {
    private T ob;
    
    public void set(T o) {
        ob = o;
    }
    public T get() {
        return ob;
    }
 }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 class Boxmain {
    public static void main(String[] args) {
       Box<Integer> box1 = new Box<>();
       box1.set(24);
 
       Box<String> box2 = new Box<>();
       box2.set("Poly");
       
       if(compBox(box1, 25))
           System.out.println("상자 안에 25 저장");
 
       if(compBox(box2, "Moly"))
           System.out.println("상자 안에 Moly 저장");
            
       System.out.println(box1.get());
       System.out.println(box2.get());
    }
 
     private static boolean compBox(Box<Integer> box1, int num) {
        if(box1.get() == num)
           return true;
       else
          return false;
       }
        
     private static boolean compBox(Box<String> box2, String str) {
        if(box2.get() == str)
           return true;
       else
           return false;
    }
 }
cs

 

 

9. 컬렉션 프레임워크란?

· 컬렉션 프레임은 Set<E>, List<E>, Queue<E>, Map<K, V>와 같이 크게 4가지로 분류된다.
· 자료구조 및 알고리즘을 구현해 놓은 일종의 라이브러리로써(일종의 class 모임들), 제네릭 기반으로 구현한다.