Application/JAVA & Kotlin

Java 제네릭

반응형

제네릭이란?

클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 타입검사를 수행하는 방법. (List<String>)

반대 개념으로 Raw Type을 들 수 있다. (List)


효과

  • 컴파일 시점에 타입 체크를 수행할 수 있어서 좀 더 안정성 제공.
    (런타임 시에 타입 에러가 발생하지 않고, 컴파일 시점에 타입 에러가 발생한다는 것은 엄청난 효과....!)

제네릭의 타입 소거 시점

  • 제네릭 타입은 컴파일 시점컴파일러에 의해 자동으로 검사 되어 타입 변환된다.
  • 그리고 나서 런타임 시점에는 모든 제네릭 타입은 소거(제거)되고, 런타임 시점에는 어떠한 제네릭 타입도 포함되지 않게 된다.

제네릭의 특징

- 비구체화

  • 제네릭 타입은 비구체화 타입으로, 컴파일 시점에 타입 체크를 수행하고 런타임에는 타입을 모두 소거하는 방법을 사용하고 있다. (기존의 Raw Type과의 호환성을 위해서)
  • 참고로 배열은 구체화 (런타임 시점에 타입을 알고 있음)

- 비공변

  • 또한 배열과 다르게 제네릭은 비공변의 특징을 갖고 있음.
  • Parent, Child 타입이 있을 경우(Parent 타입은 Child 타입의 상위 타입이다)
    List<Parent>는 List<Child>의 부모 타입이 아님.
  • (배열은 공변의 성질을 가지고 있어서 Parent, Child 타입이 있을 경우 Parent[]는 Child[]의 상위 타입이 된다.)
반응형