제네릭
제네릭이 필요한 이유
정리
다형성을 활용한 덕분에 코드의 중복을 제거하고, 기존 코드를 재사용할 수 있게 됬다. 하지만 입력할 때 실수로 원하지 않는 타입이 들어갈 수 있는 타입 안정성 문제가 발생한다. 예를 들어 integerBox에는 숫자만 넣어야 하고, StringBox에는 문자열만 입력할 수 있어야한다. 하지만 박스에 값을 보관하는 set()의 매개변수가 Obejct 타입이기 때문에 다른 타입의 값을 입력할 수 있다. 그리고 반환 시점에서 Object를 반환하기 때문에 원하는 타입을 정확하게 받을 수 없고 항상 위험한 다운 캐스팅을 시도해야 한다. 결과적으로 이 방식은 타입 안정성이 떨어진다.
다형성을 통한 중복 해결 시도
제네릭 적용
제네릭을 사용하면 코드 재사용과 안정성이라는 두 마리 토끼를 한 번에 잡을 수 있다.
<>사용한 클래스를 제네릭 클래스라 한다. 이 기호(<>)를 보통 다이아몬드라 한다.
클래스 오른쪽에 <T>와 같이 선언하면 제네릭 클래스가 된다. 여기서 T를 타입 매개변수라 한다.
타입 추론
자바가 스스로 타입 정보를 추론해서 개발자가 타입 정보를 생략할 수 있는 것
제네릭 용어와 관례
제네릭의 핵심은 사용할 타입을 미리 결정하지 않는다는 점이다. 클래스 내부에서 사용하는 타입을 정의하는 시점에 결정하는 것이 아니라 실제 사용하는 생성 시점에 타입을 결정하는 것이다.
제네릭 타입 매개변수와 타입 인자
메서드의 매개변수는 사용할 값에 대한 결정을 나중으로 미루는 것이고, 제네릭의 타입 매개변수는 사용할 타입에 대한 결정을 나중으로 미루는 것이다.
정리
- 메서드는 매개변수에 인자를 전달해서 사용할 값을 결정한다.
- 제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정한다.
용어 정리
- 제네릭(Generic) 단어
- 제네릭이라는 단어는 일반적인, 범용적인이라는 영어 단어 뜻이다.
- 풀어보면 특정 타입에 속한 것이 아니라 일반적으로, 범용적으로 사용할 수 있다는 뜻이다
- 제네릭 타입 (Generic Type)
- 클래스나 인터페이스를 정의할 때 타입 매개변수를 사용하는 것을 말한다.
- 제네릭 클래스, 제네릭 인터페이스를 모두 합쳐서 제네릭 타입이라 한다.
- 타입은 클래스, 인터페이스, 기본형(int 등)을 모두 합쳐서 부르는 말이다.
- 예: class GenericBox<T> { private T t; }
- 여기에서 GenericBox<T>를 제네릭 타입이라 한다
- 타입 매개변수 (Type Parameter)
- 제네릭 타입이나 메서드에서 사용되는 변수로, 실제 타입으로 대체된다.
- 예: GenericBox<T>
- 여기에서 T를 타입 매개변수라 한다.
- 타입 인자 (Type Argument)
- 제네릭 타입을 사용할 때 제공되는 실제 타입이다.
- 예: GenericBox<Integer>
- 여기에서 Integer를 타입인자라 한다.
제네릭 명명 관례
일반적으로 대문자를 사용하고 용도에 맞는 단어의 첫글자를 사용하는 관례를 따른다.
- E - Element
- K - Key
- N - Number
- T - Type
- V - value
- S,U,V etc - 2nd, 3rd, 4th types
제네릭 기타
한번에 여러 타입 매개변수를 선언할 수 있다.
class Data<K, V> {}
타입 인자로 기본형은 사용할 수 없다.
출처 - 김영한의 실전 자바 중급 2편
'Backend > Java' 카테고리의 다른 글
컬렉션 프레임워크 - ArraryList (0) | 2024.08.18 |
---|---|
제네릭 2 (0) | 2024.08.18 |
예외 처리2 (0) | 2024.08.13 |
예외 처리 1 (0) | 2024.08.13 |
중첩 클래스, 내부 클래스 - 2 (0) | 2024.08.13 |