티스토리 뷰

Java/기본

033. Java Generic

따강아지 2022. 5. 25. 00:21
  • 포괄적인, 총칭의, 회사 이름이 붙지 않은, 일반 명칭으로 판매되는 사전적 의미로, 딱 하나를 정하지 않고 범용적이고 포괄적이라는 의미
  • Data type을 특정한 type하나로 정하지 않고 사용할 때마다 바뀔 수 있게 범용적이고 포괄적으로 지정한다 라는 의미
  • Object Class의 한계를 극복
  • 호출되는 시점에 실제 Generic 타입을 지정

1.  왜 Generic가 만들어졌을까?

List<String> list = new ArrayList<>() 에서 List<String>처럼 호출되는 시점에 실제 Generic 타입을 지정한다.


2. Generic Class

  • Class or Interface로 정의할 수 있음
  • 클래스 내부에서 사용하는 데이터의 타입(Type)을 클래스의 인스턴스를 생성할 때 결정하는 것.
  • 기본 데이터 타입(int, long..)에 대해서는 지정이 불가능
  • Class를 정의하는 시점에 타입을 지정하는 것이 아니라 객체 생성 시점에 실제 타입을 지정

  • 주의사항 
    • 기본 유형으로 제네릭 유형을 인스턴스화 할 수 없음
    • 유형 매개 변수의 인스턴스를 생성할 수 없음
    • 유형이 유형 매개 변수 인 정적 필드를 선언할 수 없음
    • 매개 변수가 있는 유형에 캐스트 또는 instanceof를 사용할 수 없음
    • 매개 변수가있는 유형의 배열을 만들 수 없음
    • 매개 변수가있는 유형의 개체를 생성, 캐치 또는 던질 수 없음
    • 각 오버로드의 형식 매개 변수 유형이 동일한 원시 유형으로 지워지는 메서드를 오버로드 할 수 없음


3. Generic Method

  • Method 만들 때 파라미터와 반환 값의 자료형을 Generic로 선언 한 Method
  • 입력 매개 변수 값으로 Generic Type을 유추할 수 있을 경우는 생략 가능
  • Generic Method 내부에서는 매개변수로 한 참조 변수의 메서드로 Object Class의 Method만 가능

  • extends : 매개 변수에 특정 타입만 받게 제한할 때 사용
  • 여러 개 사용 시  임의로 타입 설정


4. Generic WildCard

  • 와일드카드 타입에는 총 세 가지의 형태가 있으며 물음표(?)라는 키워드로 표현
  • 제네릭타입<?> :  타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스타입이 올 수 있음
  • 제네릭타입<? extends 상위타입> : 와일드카드의 범위를 특정 객체의 하위 클래스만 올 수 있음.
  • 제네릭타입<? super 하위타입> : 와일드카드의 범위를 특정 객체의 상위 클래스만 올 수 있음.

 

'Java > 기본' 카테고리의 다른 글

자바에서 Array와 ArrayList차이점  (0) 2023.05.01
034. Java Inner Class  (0) 2022.05.31
032. Java Class 상속  (0) 2022.05.24
031. Java 외부 구성 요소  (0) 2022.05.16
030. Class 구성 요소  (0) 2022.05.16