Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- RestController
- reverse()
- prettier
- 생성형AI
- SPLIT
- Java
- JDoodle
- Generic
- 가독성
- 문자열
- outfitanyone
- StringTokenizer
- Repository
- vscode
- Service
- JAVA 설치
- 백준 문자열
- putty
- redis
- Component
- Controller
- 문자열 반복문
- 다이얼
- 런타임에러
- spring
- StringBuilder
- 생활코딩
- 일관성
- 백준
- mobaXterm
Archives
- Today
- Total
gone
[Java] 제네릭 타입 본문
Java에서 T, E, K, V 같은 알파벳을 사용한 메서드나 클래스는 "제네릭(Generic)" 을 의미한다.
제네릭은 컴파일 타임에 타입을 지정할 수 있도록 하는 기능으로, 유연성과 타입 안정성을 높여준다.
* 대표 타입 매개변수
| 제네릭 타입 | 의미 | 사용 예시 |
| T (Type) | 임의의 타입을 나타냄 (가장 일반적) | <T> T getvalue() |
| E (Element) | 컬랙션(List, Set)에서 요소(Element)를 나타냄 | List<E> |
| K (Key), V (Value) | Map의 Key와 Value 타입을 의미 | Map<K, V> |
* 개념
- 컴파일 타임에 타입을 지정할 수 잇도록 해주는 기능
- 클래스나 메서드의 타입을 특정 타입으로 고정하지 않고, 사용하는 시점에서 결정할 수 있도록 함.
- 컴파일 시 타입을 체크하여 안정성을 높임.
* 제네릭을 사용하지 않는 경우
public Object get(Long key) {
return "Hello"; // 리턴 타입이 Object이므로, 원하는 타입으로 캐스팅 필요
}
String value = (String) get(123L); // 반드시 캐스팅해야 함
=> 직접 캐스팅해야 하므로 런타임 오류 발생 가능성이 있음..
* 제네릭을 사용한 경우
public <T> T get(Long key, Class<T> classType) {
return classType.cast("Hello");
}
String value = get(123L, String.class); // 컴파일 타임에 타입이 정해짐
=> 타입 안정성이 보장되고, 캐스팅할 필요 없음..
1. T
public class Box<T> {
private T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
}
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
System.out.println(stringBox.get()); // "Hello"
Box<Integer> intBox = new Box<>();
intBox.set(100);
System.out.println(intBox.get()); // 100
}
}
2. E
public class CustomList<E> {
private List<E> list = new ArrayList<>();
public void add(E element) {
list.add(element);
}
public E get(int index) {
return list.get(index);
}
}
public class Main {
public static void main(String[] args) {
CustomList<String> stringList = new CustomList<>();
stringList.add("Java");
System.out.println(stringList.get(0)); // "Java"
}
}
3. K, V
public class CustomMap<K, V> {
private Map<K, V> map = new HashMap<>();
public void put(K key, V value) {
map.put(key, value);
}
public V get(K key) {
return map.get(key);
}
}
public class Main {
public static void main(String[] args) {
CustomMap<String, Integer> customMap = new CustomMap<>();
customMap.put("age", 25);
System.out.println(customMap.get("age")); // 25
}
}
'개발일지(TIL) > Java' 카테고리의 다른 글
| [Java] Spring - 빈 스코프 (Scope) (0) | 2024.11.01 |
|---|