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 모임들), 제네릭 기반으로 구현한다.
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/23_Stack, Queue, Map (0) | 2021.02.06 |
---|---|
면접족보 20/12/22_ArrayList, Set (0) | 2021.02.06 |
면접족보 20/12/18_제네릭 개념 (0) | 2021.02.03 |
면접족보 20/12/17_Shallow, Deep copy (0) | 2021.02.01 |
면접족보 20/12/16_예외처리 (0) | 2021.02.01 |