[강의] Java Generic

Jerry·2025년 7월 10일

Topic

Generic

What I Learned

제네릭(Generic)

정의

  • 특정 클래스나 메소드 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
  • 클래스와 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용할 수 있어 외부에서 Type을 전달
  • 특정 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식

특징

  • 타입 안정성(Type Safety): 컴파일 시점에 타입을 체크하여 런타임 오류 예방
  • 형 변환 제거(No Casting): 타입이 고정되어 있어 명시적 형 변환이 필요 없음
  • 재사용성(Reusability): 하나의 클래스나 메소드로 여러 타입 처리 가능
  • 가독성 향상(Readability): 코드의 의미가 명확해져 유지보수에 용이
  • 제한된 타입 사용(Bounded Type Parameters): T extends Number처럼 제한 가능
  • 와일드카드 지원(?): ?, ? extends, ? super로 타입 유연성 제공
  • 타입 소거(Type Erasure): 컴파일 후에는 제네릭 타입 정보가 제거됨

선언 방법

  • 클래스나 인터페이스 이름 뒤에 <Type> 기호를 추가하여 타입을 파라미터로 지정합니다.
  • 타입 파라미터는 변수와 동일한 규칙에 따라 작성되고 일반적으로 대문자 한 글자로 표현합니다.
// 제네릭 타입 정의
public class SampleClass<T> { ... }
public intreface SampleInterface<T> { ... }

// 제네릭 타입 활용 문법
SampleClass<String> sampleClass1 = new SampleClass<String>();
SampleClass<String> sampleClass2 = new SampleClass();

멀티 타입 파라미터

  • 제네릭은 두 개 이상의 멀티 타입 파라미터 사용이 가능합니다.
  • 각각 타입 파라미터를 콤마로 구분하여 선언합니다.

제네릭 메소드

// 제네릭 메소드 정의
public <T> T methodName(T param, ...) { ... }
// 제네릭 메소드 사용
<String>methodName(arguments);
methodName(arguments); // 사용할 타입을 생략하면 인자 값의 타입으로 추정

타입 파라미터 제한

  • 타입 파라미터 뒤에 extends 키워드를 사용하여 상위 타입을 지정합니다.
  • 상위 타입은 클래스와 인터페이스도 가능합니다.
  • 타입 파라미터 변수에서 상위 타입의 멤버(필드, 메소드)만 접근할 수 있습니다.

와일드 카드 타입 파라미터

  • ? 어떤 타입이든 전체를 포괄
    • 내부에서 Object로 읽기 가능
    • 쓰기 불가능
  • ? extends T T 또는 그 하위 타입
    • T 타입으로 읽기 가능
    • 쓰기 제한적
  • ? super T T 또는 그 상위 타입
    • T 타입의 멤버로 쓰기 가능
    • Object로만 읽기 가능

상속과 구현

  • 제네릭 타입의 클래스나 인터페이스를 상속받을 경우 자식 클래스도 제네릭 타입으로 정의해야 합니다.
  • 자식 제네릭 타입은 부모의 제네릭 타입에서 확장할 수 있습니다.

To study

profile
Backend engineer

0개의 댓글