자바의신 21장

kimseungki·2022년 8월 11일
0
post-thumbnail

개요

제네릭에 대한 설명이 대다수이다. 내 경험상 제네릭을 쓴 적이 거의 없었고, 메소드 같은거 볼 때, 제네릭이 들어있는거 보고.. 아 뭐지 모르겠어.. 하고 넘어가기만 했다. 이 챕터를 보고 제네릭을 확실하게 이해할 수 있었다.

제네릭의 사용목적

  1. 객체 생성 후 형변환을 하는 과정을 줄이기 위해
  2. 객체를 메소드 파라미터로 넣을 때, 메소드파라미터 타입이 모호한 경우
  3. 메소드 파라미터 내에 객체의 메소드 파라미터에 데이터를 넣거나 수정할 때

예시코드(1번상황)

public class<T> Car {
	private T item;
    void setItem() {
    	this.item = item;
    }
    T getItem() {
    	return this.item;
    }
}
public static void main{
	Car<String> car = new Car<String>(); // T가 String로 바뀜
	Car<Integer> car = new Car<Integer>(); // T가 Integer로 바뀜
}

예시코드(2-1번상황)

public class<T> Car {
	private T item;
    void setItem() {
    	this.item = item;
    }
    T getItem() {
    	return this.item;
    }
}
public static void main{
	Car<String> car = new Car<String>(); // T가 String로 바뀜
	carMethod(car);
}
public void carMethod(Car<?> car) {
	Object data = car.getItem();
}

예시코드(2-2번상황)

public class<T> Car {
	private T item;
    void setItem() {
    	this.item = item;
    }
    T getItem() {
    	return this.item;
    }
}
public static void main{
	Car<String> car = new Car<String>(); // T가 String로 바뀜
	carMethod(car);
}
//
public void carMethod(Car<? extends Style> car) {
	Style data = car.getItem(); //최상단이 Style여서 Object를 사용안해도 실행가능
    // 하지만 data에 값을 조회는 가능하지만, 수정은 할 수가 없음
}

예시코드(3번상황)

public class<T> Car {
	private T item;
    void setItem() {
    	this.item = item;
    }
    T getItem() {
    	return this.item;
    }
}
public static void main{
	Car<String> car = new Car<String>(); // T가 String로 바뀜
	carMethod(car);
}
//
public <T> void carMethod(Car<? extends Style> car, T temp) {
	Style data = car.getItem(); //최상단이 Style여서 Object를 사용안해도 실행가능
    data.setData(temp);
    T item = data.getItem;
}

후기

문서나 아니면 라이브러리를 볼 때, ? extends 등등을 많이 봤지만 이해를 안하고 넘어갔었다. 이번 기회를 통해 기존 로직등을 파악할 때 해당 챕터에서 본 지식이 큰 도움이 될 것 같다.

profile
seung 기술블로그

0개의 댓글