J-S-15 추상화와 효율성 그리고 제네릭
글 정보
- 카테고리
- Programming/Java/Starter
- 태그
- JavaLevel1
1. ADT(추상 데이터 타입)와 제네릭의 관계
추상 형식이란 특정 타입에 대한 의존성을 낮추는 것을 의미합니다.
- 범용성의 증대
- 특정 타입에 얽매이지 않으므로 코드의 재사용성이 높아집니다.
- 결과적으로 개발 효율이 극대화됩니다.
- 제네릭(Generic)의 역할
- 추상형을 통해 재사용성을 높여 범용성과 효율을 모두 챙기는 핵심 문법입니다.
- 전문가의 영역
- 높은 수준의 추상화 코드를 설계하는 것은 난이도가 매우 높습니다.
- 초보 단계에서는 직접 설계하기보다 컬렉션 프레임워크처럼 이미 잘 만들어진 추상화 도구를 '제대로' 사용하는 것에 집중하는 것이 좋습니다.
2. 제네릭 타입(Generic Type) 활용하기
제네릭은 형 안정성을 유지하면서도 코드 재사용성을 극대화할 수 있는 강력한 도구입니다.
- 주요 특징
- 타입 캐스팅 방지: 런타임에 별도의 타입 변환이 필요 없어 코드가 간결해지고 성능이 향상됩니다.
- 컴파일 타임 체크: 컴파일 단계에서 타입 변수가 실제 타입으로 변환되므로 미리 오류를 방지할 수 있습니다.
- 사용법 및 제약 사항
- 선언 방식: 클래스, 인터페이스, 메서드 선언 시 타입 매개변수(
)를 기술합니다. - 타입 제한:
형식을 통해 특정 클래스의 자식 클래스로만 타입을 제한할 수 있습니다. - 참조 타입만 가능:
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 staticT genMethod(T t) { ... } - 특징
- 메서드 반환 타입 앞에
를 명시하여 해당 메서드 내에서만 사용할 타입임을 선언합니다. - 클래스 레벨의 제네릭과 독립적으로 타입을 운영할 수 있어 유연성이 높습니다.