ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Chapter 13 제네릭 확인문제 정답
    프로그래밍 언어/이것이 자바다 2022. 1. 5. 22:44

    1. 제네릭에 대한 설명으로 틀린 것은 무엇입니까?

    ① 컴파일 시 강한 타입 체크를 할 수 있다.

    ② 타입 변환(casting)을 제거한다.

    ③ 제네릭 타입은 타입 파라미터를 가지는 제네릭 클래스와 인터페이스를 말한다.

    ④ 제네릭 메소드는 리턴 타입으로 타입 파라미터를 가질 수 없다.

     

     

    2. ContainerExample 클래스의 main() 메소드는 Container 제네릭 타입을 사용하고 있습니다. main() 메소드에서 사용하는 방법을 참고해서 Container 제네릭 타입을 선언해보세요.

    public class ContainerExample {
    	public static void main(String[] args) {
    		Container<String> container1 = new Container<String>();
    		container1.set("홍길동");
    		String str = container1.get();
    		
    		Container<Integer> container2 = new Container<Integer>();
    		container2.set(6);
    		int value = container2.get();
    	}
    }
    public class Container<C> {
    	private C c;
    
    	public C get() {
    		return c;
    	}
    
    	public void set(C c) {
    		this.c = c;
    	}
    }

     

     

    3. ContainerExample 클래스의 main() 메소드는 Container 제네릭 타입을 사용하고 있습니다. main() 메소드에서 사용하는 방법을 참고해서 Container 제네릭 타입을 선언해보세요.

    public class ContainerExample {
    	public static void main(String[] args) {
    		Container<String, String> container1 = new Container<>();
    		container1.set("홍길동", "도적");
    		String name1 = container1.getKey();
    		String job = container1.getValue();
    		
    		Container<String, Integer> container2 = new Container<>();
    		container2.set("홍길동", 35);
    		String name2 = container2.getKey();
    		int age = container2.getValue();
    	}
    }
    public class Container<Key, Value> {
    	private Key key;
    	private Value value;
    	
    	public Key getKey() {
    		return key;
    	}
    	
    	public Value getValue() {
    		return value;
    	}
    	
    	public void set(Key key, Value value) {
    		this.key = key;
    		this.value = value;
    	}
    }

     

     

    4. Util.getValue() 메소드는 첫 번째 매개값으로 Pair 타입과 하위 타입만 받고, 두 번째 매개값으로 키값만 받습니다. 리턴값은 키값이 일치할 경우 Pair에 저장된 값을 리턴하고, 일치하지 않으면 null을 리턴하도록 getValue() 제네릭 메소드를 정의해보세요.

    public class UtilExample {
    	public static void main(String[] args) {
    		Pair<String, Integer> pair = new Pair<>("홍길동", 35);
    		Integer age = Util.getValue(pair, "홍길동");
    		System.out.println(age);
    		
    		ChildPair<String, Integer> childPair = new ChildPair<>("홍삼원", 20);
    		Integer childAge = Util.getValue(childPair, "홍삼순");
    		System.out.println(childAge);
    	}
    }
    public class Pair<K,V> {
    	private K key;
    	private V value;
    	
    	public Pair(K key, V value) {
    		super();
    		this.key = key;
    		this.value = value;
    	}
    	
    	public K getKey() {
    		return key;
    	}
    	
    	public V getValue() {
    		return value;
    	}
    }
    public class ChildPair<K,V> extends Pair<K,V> {
    	public ChildPair(K k, V v) {
    		super(k, v);
    	}
    }
    public class OtherPair<K,V> {
    	private K key;
    	private V value;
    	
    	public OtherPair(K key, V value) {
    		super();
    		this.key = key;
    		this.value = value;
    	}
    
    	public K getKey() {
    		return key;
    	}
    
    	public V getValue() {
    		return value;
    	}
    }
    public class Util {
    	
    	//첫 번째 방법
    	
    	public static<K,V> V getValue(Pair<K,V> p, K k) {
    		if(p.getKey() == k) {
    			return p.getValue(); 
    		} else { return null; } }
    	
    	//두 번째 방법
    	public static<P extends Pair<K,V>,K,V> V getValue(P p, K k) {
    		if(p.getKey() == k) {
    			return p.getValue();
    		} else {
    			return null;
    		}
    	}
    	
    }

    댓글