nme.kr

문서의 이전 판입니다!


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<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());
		}

	}

}