nme.kr

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
프로그램:java:ㄴhomework:book_source:ch14 [2022/01/04 11:19]
clayeryan@gmail.com 만듦
프로그램:java:ㄴhomework:book_source:ch14 [2023/07/13 17:29] (현재)
clayeryan@gmail.com ↷ 문서가 programmer:java:ㄴhomework:book_source:ch14에서 프로그램:java:ㄴhomework:book_source:ch14(으)로 이동되었습니다
줄 1: 줄 1:
-====== Chapter14 제네릭 ======+====== Ch14 제네릭 ====== 
 + 
 +===== 제네릭 타입 ===== 
 + 
 +<code java> 
 +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(); 
 +
 +
 +</code> 
 + 
 +<code java> 
 +package chapter14; 
 + 
 +public class GenericEx2 { 
 + 
 + public static void main(String[] args) { 
 +  
 + Generic<String> gen = new Generic<String>(); 
 + 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<Integer> gen2 = new Generic<Integer>(); 
 + gen2.set(ii); 
 + gen2.print(); 
 +  
 + for(Integer o : gen2.get()) { 
 + // String s = (String)o; // 형변환 필요없음 
 + System.out.println(o); 
 +
 + 
 +
 + 
 +
 + 
 +class Generic<T>
 + 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(); 
 +
 +
 +</code> 
 + 
 +**Member.java** 
 +<code 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; 
 +
 +  
 +
 + 
 +</code> 
 + 
 +**MemberNoGeneric.java** 
 +<code 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<list.size(); i++) { 
 + System.out.println("인덱스 : "+i 
 + +", 이름 : "+((Member)list.get(i)).getName() 
 + +", 아이디 : "+((Member)list.get(i)).getId() 
 + +", 비밀번호 : "+((Member)list.get(i)).getPassword() 
 + +", 나이 : "+((Member)list.get(i)).getAge()); 
 +
 + 
 +
 + 
 +
 + 
 +</code> 
 + 
 +<code java> 
 +package chapter14; 
 + 
 +import java.util.ArrayList; 
 +import java.util.List; 
 + 
 +public class MemberGeneric { 
 + 
 + public static void main(String[] args) { 
 +  
 + // Member 제네릭을 사용한 경우 
 + List<Member> list = new ArrayList<Member>(); 
 +  
 + 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<list.size(); i++) { 
 + System.out.println("인덱스 : "+i 
 + +", 이름 : "+list.get(i).getName() 
 + +", 아이디 : "+list.get(i).getId() 
 + +", 비밀번호 : "+list.get(i).getPassword() 
 + +", 나이 : "+list.get(i).getAge()); 
 +
 + 
 +
 + 
 +
 + 
 +</code> 
 + 
 +<code java> 
 +package chapter14; 
 + 
 +public class GenericEx3 { 
 + 
 + public static void main(String[] args) { 
 +  
 + Generic2<String, Integer> gen1 = new Generic2<String, Integer>(); 
 + gen1.set("홍길동", 1111); 
 + // gen1.set("이순신", "A111"); // 에러 
 +  
 + System.out.println("<String, Integer>"); 
 + System.out.println("name : "+gen1.getName()); 
 + System.out.println("id : "+gen1.getId()); 
 +  
 + Generic2<String, String> gen2 = new Generic2<String, String>(); 
 + gen2.set("이순신", "A1111"); 
 + System.out.println("<String, String>"); 
 + System.out.println("name : "+gen2.getName()); 
 + System.out.println("id : "+gen2.getId()); 
 + 
 +
 + 
 +
 + 
 +class Generic2<K, V> { 
 + K name; 
 + V id; 
 +  
 + void set(K name, V id) { 
 + this.name = name; 
 + this.id = id; 
 +
 +  
 + K getName() { 
 + return name; 
 +
 +  
 + V getId() { 
 + return id; 
 +
 +
 +</code> 
 + 
 +<code java> 
 +package chapter14; 
 + 
 +import java.util.HashMap; 
 +import java.util.Map; 
 + 
 +public class HashMapEx { 
 + 
 + public static void main(String[] args) { 
 +  
 + Map<String, Object> hm = new HashMap<String, Object>(); 
 + 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")); 
 + 
 +
 + 
 +
 + 
 +</code> 
 + 
 +<code java> 
 +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<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 
 +  
 + Map<String, Object> hm = new HashMap<String, Object>(); 
 + hm.put("name", "홍길동"); 
 + hm.put("id", "hong"); 
 + hm.put("age", 30); 
 + list.add(hm); 
 +  
 + hm = new HashMap<String, Object>(); 
 + hm.put("name", "이순신"); 
 + hm.put("id", "lee"); 
 + hm.put("age", 40); 
 + list.add(hm); 
 +  
 + hm = new HashMap<String, Object>(); 
 + hm.put("name", "김유신"); 
 + hm.put("id", "kim"); 
 + hm.put("age", 50); 
 + list.add(hm); 
 +  
 + for (int i=0; i<list.size(); i++) { 
 + System.out.println("인덱스 : "+i 
 + +", 이름 : "+list.get(i).get("name"
 + +", 아이디 : "+list.get(i).get("id"
 + +", 나이 : "+list.get(i).get("age")); 
 +
 + 
 +
 + 
 +
 + 
 + 
 +</code> 
 + 
 +<code java> 
 +package chapter14; 
 + 
 +public class GenericEx5 { 
 + 
 + public static void main(String[] args) { 
 +  
 + Gen3 g3 = new Gen3(); 
 +  
 + // Gen2의 상위 클래스 제네릭 선언 가능 
 + Generic5<? super Gen2> g2 =new Generic5<Gen1>(g3); 
 + // Gen2 t1 = g2.get(); // 에러 Gen2는 Gen2의 부모클래스가 아님 
 + // Gen3 t1 = g2.get();// 에러 Gen3은 Gen2 의 부모클래스가 아님 
 +  
 + Gen1 t2 = (Gen3)g2.get(); // Gen1은 부모클래스이므로 가능 
 + Object t1 = g2.get(); // Object는 최상위 클래스이기 때문에 가능 
 +  
 + System.out.println(t2.name); 
 + System.out.println(t2.getName()); 
 +  
 + // Gen2의 하위 클래스 제네릭 선언 가능 
 + Generic5<? extends Gen2> g4 =new Generic5<Gen3>(g3); 
 + Gen2 t3 = g4.get(); // Gen2 자신도 포함 
 + Gen3 t4 = (Gen3)g4.get(); // Gen3은 하위클래스이므로 가능 
 +  
 + // <?> 모든 클래스 타입 가능 
 + Generic5<?> g6 =new Generic5<Gen3>(g3); 
 + Object t5 = g6.get(); 
 + Gen3 t6 = (Gen3)g6.get(); 
 +  
 + // 정수도 가능 
 + Generic5<?> g7 =new Generic5<Integer>(1); 
 + System.out.println(g7.get()); 
 + 
 +
 + 
 +
 + 
 +class Gen1 { 
 + String name = "Gen1"; 
 +  
 + String getName() { 
 + return name; 
 +
 +
 + 
 +class Gen2 extends Gen1 { 
 + String name = "Gen2"; 
 +  
 + String getName() { 
 + return name; 
 +
 +
 + 
 +class Gen3 extends Gen2 { 
 + String name = "Gend3"; 
 +  
 + String getName() { 
 + return name; 
 +
 +
 + 
 +class Generic5<T>
 + T obj; 
 +  
 + Generic5(T obj) { 
 + this.obj = obj; 
 +
 + void set(T obj) { 
 + this.obj = obj; 
 +
 + T get() { 
 + return obj; 
 +
 +
 +</code>