티스토리 뷰

배움과 복습

제너릭(Generic)

뚜비콩 2017. 9. 11. 10:09

Q. 왜 제네릭을 사용해야 할까?

java5부터 제네릭(Generic)타입이 새로 추가되었다. 


1. 타입 체크

코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 한다. --> 에러를 사전에 방지

2. 타입 변환(casting)을 제거

비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 영향을 끼친다. 


---- Generic Test ----

package chapter13;

import java.util.ArrayList;
import java.util.List;

public class GenericTest {
	
	public void ex1() {
		//제너릭을 사용하지 않은 경우 저장된 데이터는 반드시 캐스팅해야 함
		
		List data = new ArrayList();
		data.add("홍길동");
		data.add("일지매");
		
		String name1 = (String)data.get(0);
		String name2 = (String)data.get(1);
		
		System.out.println(name1+", "+name2);
		
		data.add(10);
		data.add(3.5);
		
		Integer name3 = (Integer)data.get(2);
		Double name4 = (Double)data.get(3);

		System.out.println(name3+", "+name4);
	}
	
	public void ex2() {
		// 제너릭을 사용한 경우 
		List<String> data = new ArrayList<String>();
		data.add("홍길동");
		//data.add(10);  		//스트링타입이니까 안 돼
		data.add("일지매");
		
		String name1 = data.get(0);
		String name2 = data.get(1);
		
		System.out.println(name1+", "+name2);
	}
	
	public GenericTest() {
		ex1();
		System.out.println("---- 제너릭을 사용한 경우 ----");
		ex2();
	}
	public static void main(String[] args){
		new GenericTest();
		
	}

}
	//Generic 타입을 사용자 정의 클래스형으로 지정
	public void ex3() {
		List<Member> data = new ArrayList<Member>();
		Member m1 = new Member("aaaa", "1111", "강동원");
		Member m2 = new Member("bbbb", "2222", "박보검");
		Member m3 = new Member("cccc", "3333", "송중기");
		
		data.add(m1);
		data.add(m2);
		data.add(m3);
		
		//print		
		for (int i = 0; i<data.size(); i++){
			Member m = data.get(i);
			System.out.println(m);
		}
		
		//새로 만들어진 객체가 data에 존재하는지 체크 
		Member m4 = new Member("aaaa", "1111", "임꺽정");
		if (data.contains(m4)){ 	//.contains() 존재 ㅇㅇ
			System.out.println("ID가 이미 존재함...");
		} else {
			System.out.println("신규 회원입니다. ");
		}
				
		//for문으로 체크해보자
		for(int i = 0; i<data.size(); i++){
			Member m5 = data.get(i);
			if (m5.equals(m4)
					){
				System.out.println("ID가 이미 존재함...222");
				break;
			}
		}
	}
	




※Ctrl + Shift + L : 단축키 보기


'배움과 복습' 카테고리의 다른 글

p.743 - 37행  (0) 2017.09.11
컬렉션 프레임워크  (0) 2017.09.11
멀티 스레드(multi-Thread)  (0) 2017.09.08
중첩 클래스  (0) 2017.09.04
java GUI - actionPerformed  (0) 2017.09.04
댓글