====== Ch14 제네릭 ======
===== 제네릭 타입 =====
package chapter14;
public class GenericEx {
	public static void main(String[] args) {
		
		NoGeneric nogen = new NoGeneric();
		String[] ss = {"홍길동","이순신","김유신"};
		
		// Object 타입의 매개변수에 String 배열객체 전달
		nogen.set(ss);
		nogen.print();
		
		Object[] objs = nogen.get();
		for(Object o : objs) {
			String s = (String)o; // String으로 강제형변환
			System.out.println(s);
		}
		
		Integer[] ii = {1,2,3};
		
		// Object 타입의 매개변수에 Integer 배열객체 전달
		nogen.set(ii);
		objs = nogen.get();
		
		for(Object o : objs) {
			String s = (String)o; // String으로 강제형변환 (에러발생)
			System.out.println(s.trim());
		}
	}
}
class NoGeneric {
	Object[] v;
	
	void set(Object[] n) {
		v = n;
	}
	
	Object[] get() {
		return v;
	}
	
	void print() {
		for(Object o : v) {
			System.out.print(o + " ");
		}
		System.out.println();
	}
}
package chapter14;
public class GenericEx2 {
	public static void main(String[] args) {
		
		Generic gen = new Generic();
		String[] ss = {"홍길동","이순신","김유신"};
		
		// String 제네릭 타입의 매개변수에 String 배열객체 전달
		gen.set(ss);
		gen.print();
		
		for(String s : gen.get()) {
			//String s = (String)o; // 형변환 필요없음
			System.out.println(s);
		}
		
		Integer[] ii = {1,2,3};
		
		// String 제네릭 타입의 매개변수에 Integer 배열객체 전달
		// nogen.set(ii); // 에러 발생
		Generic gen2 = new Generic();
		gen2.set(ii);
		gen2.print();
		
		for(Integer o : gen2.get()) {
			// String s = (String)o; // 형변환 필요없음
			System.out.println(o);
		}
	}
}
class Generic {
	T[] v;
	
	void set(T[] n) {
		v = n;
	}
	
	T[] get() {
		return v;
	}
	
	void print() {
		for(T o : v) {
			System.out.print(o + " ");
		}
		System.out.println();
	}
}
**Member.java**
package chapter14;
public class Member {
	private String name;
	private String id;
	private String password;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
**MemberNoGeneric.java**
package chapter14;
import java.util.ArrayList;
import java.util.List;
public class MemberNoGeneric {
	public static void main(String[] args) {
		
		// 제네릭을 사용하지 않은 경우
		List list = new ArrayList();
		
		Member mem1 = new Member();
		mem1.setName("홍길동");
		mem1.setId("hong");
		mem1.setPassword("hong1234");
		mem1.setAge(40);
		
		list.add(mem1); // 리스트에 추가
		
		Member mem2 = new Member();
		mem2.setName("이순신");
		mem2.setId("lee");
		mem2.setPassword("lee1234");
		mem2.setAge(50);
		
		list.add(mem2); // 리스트에 추가
		
		Member mem3 = new Member();
		mem3.setName("김유신");
		mem3.setId("kim");
		mem3.setPassword("kim1234");
		mem3.setAge(60);
		
		list.add(mem3); // 리스트에 추가
		
		// 리스트 갯수
		System.out.println("list.size() : "+list.size());
		
		// 모든 리스트의 요소(Member) 강제형변환 후 출력
		for (int i=0; i
package chapter14;
import java.util.ArrayList;
import java.util.List;
public class MemberGeneric {
	public static void main(String[] args) {
		
		// Member 제네릭을 사용한 경우
		List list = new ArrayList();
		
		Member mem1 = new Member();
		mem1.setName("홍길동");
		mem1.setId("hong");
		mem1.setPassword("hong1234");
		mem1.setAge(40);
		
		list.add(mem1); // 리스트에 추가
		
		Member mem2 = new Member();
		mem2.setName("이순신");
		mem2.setId("lee");
		mem2.setPassword("lee1234");
		mem2.setAge(50);
		
		list.add(mem2); // 리스트에 추가
		
		Member mem3 = new Member();
		mem3.setName("김유신");
		mem3.setId("kim");
		mem3.setPassword("kim1234");
		mem3.setAge(60);
		
		list.add(mem3); // 리스트에 추가
		
		// 리스트 갯수
		System.out.println("list.size() : "+list.size());
		
		// 모든 리스트의 요소(Member) 출력
		for (int i=0; i
package chapter14;
public class GenericEx3 {
	public static void main(String[] args) {
		
		Generic2 gen1 = new Generic2();
		gen1.set("홍길동", 1111);
		// gen1.set("이순신", "A111"); // 에러
		
		System.out.println("");
		System.out.println("name : "+gen1.getName());
		System.out.println("id : "+gen1.getId());
		
		Generic2 gen2 = new Generic2();
		gen2.set("이순신", "A1111");
		System.out.println("");
		System.out.println("name : "+gen2.getName());
		System.out.println("id : "+gen2.getId());
	}
}
class Generic2 {
	K name;
	V id;
	
	void set(K name, V id) {
		this.name = name;
		this.id = id;
	}
	
	K getName() {
		return name;
	}
	
	V getId() {
		return id;
	}
}
package chapter14;
import java.util.HashMap;
import java.util.Map;
public class HashMapEx {
	public static void main(String[] args) {
		
		Map hm = new HashMap();
		hm.put("name", "홍길동");
		hm.put("id", "hong");
		hm.put("age", 30);
		
		System.out.println(hm.get("name"));
		System.out.println(hm.get("id"));
		System.out.println(hm.get("age"));
	}
}
package chapter14;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GenericEx4 {
	public static void main(String[] args) {
		
		List