nme.kr

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램:java:ㄴhomework:book_source:ch14 [2022/01/05 16:17]
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(으)로 이동되었습니다
줄 211: 줄 211:
  
 <code java> <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>
  
 <code java> <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>
  
 <code java> <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>
  
 <code java> <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>
 +
 +<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>
 +