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<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();
}
}
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<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());
}
}
}
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());
}
}
}
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;
}
}
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"));
}
}
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"));
}
}
}
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;
}
}
별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International