제네릭이란?

누피밥·2023년 8월 8일

Java

목록 보기
4/11

java에서 컴파일 시 타입을 체크해 주는 기능이다.

제네릭 문법이 만들어진 이유
1. 컴파일 시 타입체크를 통해 시스템 안정성을 확보한다. 타입의 불일치로 발생하는 런타임 오류를 미연에 방지한다.
2. 불필요한 형변환을 제거하여 시스템의 성능을 향상시킨다.

public Tester {
	public static void main(String[] args) {
    	//제네릭 사용하지 않은 경우
        List list = new ArrayList();
        list.set("hello"); //저장시 자동 형변환
        String str = (String) list.get(0); //값 가져올 시 형변환
        
        //제네릭 사용한 경우
        List<String> list2 = new ArrayList<String>();
        list2.set("hello");
        String str2 = list2.get(0);
        //형변환 없음 - 타입 변환이 필요 없어 프로그램의 성능이 향상됨
    }
}

특정 클래스의 필드에 모든 종류의 자바 객체를 저장하고 싶은 경우에 유용하다.

class Box {
	private Object object;
    pulic Object get() { return oject; }
    public void set(Object oject) { this.object = obejct; }
}

//제네릭 사용 시
class Box2<T> {
	private T t;
    public T get() { return t; }
    public void set(T t) { this.t = t; }
}

class BoxExample {
	public static void main(String[] args) {
    	Box box = new Box();
        box.set("Mike");
        String name = (String) box.get();
        box.set(0);
        int num = (int) box.get();
        
        Box2<String> box2 = new Box2<String>();
        box2.set("Mike");
        String name2 = box2.get();
        
        Box2<Integer> box3 = new Box2<Integer>();
        box3.set(0);
        int value = box3.get();
    }
}

제네릭 문법 간결화 하기

ArrayList<String> list = new ArrayList<String>();
// 제네릭 타입의 변수 선언과 객체 생성을 동시에 하는 경우 타입 파라미터 자리에 구체적인 타입을 명시하는 문법이 2번 나와 코드가 지저분해질 수 있음

자바 7부터 제네릭 타입 파라미터의 중복 기술을 줄이기 위해 다이아몬드 연산자 제공 <>
//java 7 이후
ArrayList<String> list = new ArrayList<>();
--> 컴파일러가 타입 파라미터 부분에 <> 연산자 사용하면 타입 파라미터를 유추해서 자동으로 설정해줌 

0개의 댓글