Everyday Dev System

4주차 공부 - Generic 본문

내배캠 초기 학습/Java 문법 종합반

4주차 공부 - Generic

chaeyoung- 2023. 5. 24. 19:06

1. 제네릭의 효용

 

- 첫 번째로 제네릭의 효용은 타입 언어에서 “중복되거나 필요없는 코드를 줄여주는 것” 입니다.
- 두 번째 제네릭의 효용은 그러면서도 타입 안정성을 해치지 않는 것 입니다.

 

 

2. Generic 사용법

1. 제네릭은 클래스 또는 메서드에 사용 가능하다.

 

2. <> 안에 들어가야 할 타입을 명시한다. 이를 타입변수라고 부른다.

 ** T , U  , V , E를 많이 활용함.

 

3. method의 return type도 2번에 입력한 타입과 동일할 수 있음.

아래 코드 참조

public class Generic<T> {
    private T t;
    
    public T get() {
        return this.t;
    }
}

 

public class Generic<T> { ... }

위 클래스를 제네릭을 사용한 클래스로, 제네릭 클래스라고 부른다.

제네릭 클래스를 원시 타입 이라고도 한다.

 

 

3. 제네릭의 제한

1. 객체의 static 멤버에 사용 할 수 없습니다. 

타입 변수는 인스턴스 변수로 간주되기 때문에 static 멤버로 사용 불가함.

static T get () { ... } //에러
static void set(T t) { ... } //에러

2. 제네릭 배열 생성 할 수 없습니다.

 

 

4. 제네릭의 문법

1. 다수의 타입 변수를 사용할 수 있습니다.

public class Generic<T, U, E> {
	public E multiTypeMethod(T t, U u) { ... }
}

Generic<Long, Integer, String> instance = enw Generic();
instance.multiTypeMethod(longVal, integerVal);

2. 다형성 즉 상속과 타입의 관계는 그대로 적용된다.

 - 대표적으로 부모 클래스로 제네릭 타입변수를 지정하고, 그 안에 자식클래스를 넘기는 것은 잘 동작한다.

 

3. 와일드 카드를 통해 제네릭의 제한을 구체적으로 정할 수 있습니다.

와일드카드는 ?를 의미함.

  1. . <? extends T> : T와 그 자손들만 사용 가능
  2. <? super T> : T와 그 조상들만 가능 
  3. <?> : 제한 없음

public class ParkingLot<T extends Cat> { ... }

--> Car 클래스 타입과 그 자식 클래스 타입들만 가능

** 위와 같이 제한하는 이유는 다형성 때문이다.

 

 

4. 메서드를 제네릭을 별도로 선언 가능

- 해당 메서드에만 적용되는 제네릭 타입을 선언하여 사용 가

public static <T extends Comparable><? super T>> void sort(List<T> list)