문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
프로그램: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: | ||
- | ====== | + | ====== |
+ | |||
+ | ===== 제네릭 타입 ===== | ||
+ | |||
+ | <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 java> | ||
+ | package chapter14; | ||
+ | |||
+ | public class GenericEx2 { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | 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.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** | ||
+ | <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; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | **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(" | ||
+ | mem1.setPassword(" | ||
+ | mem1.setAge(40); | ||
+ | |||
+ | list.add(mem1); | ||
+ | |||
+ | Member mem2 = new Member(); | ||
+ | mem2.setName(" | ||
+ | mem2.setId(" | ||
+ | mem2.setPassword(" | ||
+ | mem2.setAge(50); | ||
+ | |||
+ | list.add(mem2); | ||
+ | |||
+ | Member mem3 = new Member(); | ||
+ | mem3.setName(" | ||
+ | mem3.setId(" | ||
+ | mem3.setPassword(" | ||
+ | mem3.setAge(60); | ||
+ | |||
+ | list.add(mem3); | ||
+ | |||
+ | // 리스트 갯수 | ||
+ | System.out.println(" | ||
+ | |||
+ | // 모든 리스트의 요소(Member) 강제형변환 후 출력 | ||
+ | for (int i=0; i< | ||
+ | System.out.println(" | ||
+ | +", | ||
+ | +", | ||
+ | +", | ||
+ | +", | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter14; | ||
+ | |||
+ | import java.util.ArrayList; | ||
+ | import java.util.List; | ||
+ | |||
+ | public class MemberGeneric { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | // Member 제네릭을 사용한 경우 | ||
+ | List< | ||
+ | |||
+ | Member mem1 = new Member(); | ||
+ | mem1.setName(" | ||
+ | mem1.setId(" | ||
+ | mem1.setPassword(" | ||
+ | mem1.setAge(40); | ||
+ | |||
+ | list.add(mem1); | ||
+ | |||
+ | Member mem2 = new Member(); | ||
+ | mem2.setName(" | ||
+ | mem2.setId(" | ||
+ | mem2.setPassword(" | ||
+ | mem2.setAge(50); | ||
+ | |||
+ | list.add(mem2); | ||
+ | |||
+ | Member mem3 = new Member(); | ||
+ | mem3.setName(" | ||
+ | mem3.setId(" | ||
+ | mem3.setPassword(" | ||
+ | mem3.setAge(60); | ||
+ | |||
+ | list.add(mem3); | ||
+ | |||
+ | // 리스트 갯수 | ||
+ | System.out.println(" | ||
+ | |||
+ | // 모든 리스트의 요소(Member) 출력 | ||
+ | for (int i=0; i< | ||
+ | System.out.println(" | ||
+ | +", | ||
+ | +", | ||
+ | +", | ||
+ | +", | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter14; | ||
+ | |||
+ | public class GenericEx3 { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Generic2< | ||
+ | gen1.set(" | ||
+ | // gen1.set(" | ||
+ | |||
+ | System.out.println("< | ||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | |||
+ | Generic2< | ||
+ | gen2.set(" | ||
+ | System.out.println("< | ||
+ | System.out.println(" | ||
+ | System.out.println(" | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | 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; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter14; | ||
+ | |||
+ | import java.util.HashMap; | ||
+ | import java.util.Map; | ||
+ | |||
+ | public class HashMapEx { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Map< | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | |||
+ | System.out.println(hm.get(" | ||
+ | System.out.println(hm.get(" | ||
+ | System.out.println(hm.get(" | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <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< | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | list.add(hm); | ||
+ | |||
+ | hm = new HashMap< | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | list.add(hm); | ||
+ | |||
+ | hm = new HashMap< | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | hm.put(" | ||
+ | list.add(hm); | ||
+ | |||
+ | for (int i=0; i< | ||
+ | System.out.println(" | ||
+ | +", | ||
+ | +", | ||
+ | +", | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter14; | ||
+ | |||
+ | public class GenericEx5 { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Gen3 g3 = new Gen3(); | ||
+ | |||
+ | // Gen2의 상위 클래스 제네릭 선언 가능 | ||
+ | Generic5<? | ||
+ | // Gen2 t1 = g2.get(); // 에러 Gen2는 Gen2의 부모클래스가 아님 | ||
+ | // Gen3 t1 = g2.get();// 에러 Gen3은 Gen2 의 부모클래스가 아님 | ||
+ | |||
+ | Gen1 t2 = (Gen3)g2.get(); | ||
+ | Object t1 = g2.get(); // Object는 최상위 클래스이기 때문에 가능 | ||
+ | |||
+ | System.out.println(t2.name); | ||
+ | System.out.println(t2.getName()); | ||
+ | |||
+ | // Gen2의 하위 클래스 제네릭 선언 가능 | ||
+ | Generic5<? | ||
+ | Gen2 t3 = g4.get(); // Gen2 자신도 포함 | ||
+ | Gen3 t4 = (Gen3)g4.get(); | ||
+ | |||
+ | // <?> 모든 클래스 타입 가능 | ||
+ | Generic5<?> | ||
+ | Object t5 = g6.get(); | ||
+ | Gen3 t6 = (Gen3)g6.get(); | ||
+ | |||
+ | // 정수도 가능 | ||
+ | Generic5<?> | ||
+ | System.out.println(g7.get()); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | class Gen1 { | ||
+ | String name = " | ||
+ | |||
+ | String getName() { | ||
+ | return name; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Gen2 extends Gen1 { | ||
+ | String name = " | ||
+ | |||
+ | String getName() { | ||
+ | return name; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Gen3 extends Gen2 { | ||
+ | String name = " | ||
+ | |||
+ | String getName() { | ||
+ | return name; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Generic5< | ||
+ | T obj; | ||
+ | |||
+ | Generic5(T obj) { | ||
+ | this.obj = obj; | ||
+ | } | ||
+ | void set(T obj) { | ||
+ | this.obj = obj; | ||
+ | } | ||
+ | T get() { | ||
+ | return obj; | ||
+ | } | ||
+ | } | ||
+ | </ | ||