추상화와 효율성 그리고 제네릭

JV-ST-15calendar_today2026-02-03 23:18#Java #Level1

1. ADT(추상 데이터 타입)와 제네릭과의 관계

추상 형식이란 특정 타입에 대한 의존성을 낮추는 것을 의미합니다.

  • 범용성의 증대
    • 특정 타입에 얽매이지 않으므로 코드의 재사용성이 높아집니다.
    • 결과적으로 개발 효율이 극대화됩니다.
  • 제네릭(Generic)의 역할
    • 추상형을 통해 재사용성을 높여 범용성과 효율을 모두 챙기는 핵심 문법입니다.
  • 전문가의 영역
    • 높은 수준의 추상화 코드를 설계하는 것은 난이도가 매우 높습니다.
    • 초보 단계에서는 직접 설계하기보다 컬렉션 프레임워크처럼 이미 잘 만들어진 추상화 도구를 '제대로' 사용하는 것에 집중하는 것이 좋습니다.

2. 제네릭 타입(Generic Type) 활용하기

제네릭은 형 안정성을 유지하면서도 코드 재사용성을 극대화할 수 있는 강력한 도구입니다.

  • 주요 특징
    • 타입 캐스팅 방지: 런타임에 별도의 타입 변환이 필요 없어 코드가 간결해지고 성능이 향상됩니다.
    • 컴파일 타임 체크: 컴파일 단계에서 타입 변수가 실제 타입으로 변환되므로 미리 오류를 방지할 수 있습니다.
  • 사용법 및 제약 사항
    • 선언 방식: 클래스, 인터페이스, 메서드 선언 시 타입 매개변수(<T>)를 기술합니다.
    • 타입 제한: <T extends Parent> 형식을 통해 특정 클래스의 자식 클래스로만 타입을 제한할 수 있습니다.
    • 참조 타입만 가능: int, double 같은 기본 타입(Primitive Type)은 사용할 수 없으며, 반드시 Integer, Double 같은 래퍼 클래스를 사용해야 합니다.
    • static 사용 불가: static 멤버는 인스턴스가 생성되기 전에 메모리에 올라가므로, 인스턴스화 시점에 타입이 결정되는 제네릭 타입 변수를 사용할 수 없습니다.

3. 타입 매개변수 관례

코드의 가독성을 위해 자바에서는 관용적으로 사용하는 알파벳이 있습니다.

약어 의미 설명
T Type 일반적인 타입을 의미합니다.
E Element 리스트 등 요소(Element)를 의미합니다.
K Key Map 등에서 키(Key)를 의미합니다.
V Value Map 등에서 값(Value)을 의미합니다.
N Number 숫자 타입을 의미합니다.
S, U Subsequent 2번째, 3번째 타입을 선언할 때 사용합니다.

4. 제네릭 메서드 (Generic Method)

클래스 전체가 아닌, 특정 메서드 하나에만 제네릭을 적용하고 싶을 때 사용합니다.

  • 선언 형식
    • public static <T> T genMethod(T t) { ... }
  • 특징
    • 메서드 반환 타입 앞에 <T>를 명시하여 해당 메서드 내에서만 사용할 타입임을 선언합니다.
    • 클래스 레벨의 제네릭과 독립적으로 타입을 운영할 수 있어 유연성이 높습니다.