[Java] 제네릭(Generic) 심화
Java
• 제네릭은 컴파일 시점에서 타입 오류를 방지하며, 특정 클래스 범위만 허용하고 나머지를 제한하기 위해 extends, super, 와일드카드(?)를 사용한다.
• extends는 상단 경계를 지정하여 특정 타입과 그 자손만 허용하고, super는 하단 경계를 지정하여 특정 타입과 그 부모만 허용하며, ?는 모든 타입을 허용하지만 타입 참조는 불가능하다.
• `Number` 클래스는 정수와 소수를 포함한 숫자를 표현하기 위한 클래스이며, `Integer`, `Long`, `Byte`, `Double`, `Float`, `Short` 같은 래퍼 클래스들이 `Number` 클래스를 상속받는다. 제네릭 클래스에서 `T extends Number`를 사용하면 `Number`를 상속받는 클래스만 타입으로 사용할 수 있다.
• `super` 키워드는 제네릭에서 자신보다 상위의 클래스를 호출할 수 있도록 하며, `<? super [타입]>` 형식으로 사용된다. 이는 타입 소거(Type Erasure)로 인해 특정 타입을 추론할 수 없게 되어, `T super [타입]` 형식은 실제로 존재하지 않는다.
북마크
공유하기
신고하기