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 |
Tags
- array
- 파이썬
- string
- two pointers
- database
- implement
- greedy
- hash table
- bit manipulation
- Binary Tree
- Data Structure
- Math
- sorting
- Matrix
- geometry
- Binary Search
- Class
- dynamic programming
- Number Theory
- Counting
- Tree
- Stack
- java
- 구현
- 자바
- 코딩테스트
- simulation
- Method
- 코테
- SQL
Archives
- Today
- Total
코린이의 소소한 공부노트
지네릭스 본문
// 지네릭스를 사용하지 않던 시절..
// ArrayList에는 Object[]가 있음
ArrayList list = new ArrayList(); // 아무 객체나 다 저장 가능
list.add(10);
list.add(20);
list.add(“30”); // ??
System.out.println(list); // [10, 20, 30]
Integer i = list.get(2); // 에러. 2번째 요소는 String이므로 Integer에 저장 불가
Integer i = (Integer)list.get(2); // 컴파일 통과. get()의 반환타입이 Object이므로 형변환 가능.
// 하지만 실행단계에서 ClassCastException 발생
[지네릭스]
1. 컴파일시 타입을 체크해주는 기능
- ClassCastException은 RuntimeException의 자손인데, 지네릭스를 이용하면 rum-time error를 compile-time error로 바꿔 프로그램을 죽이기보다 수정이 가능한 방향으로 바꿀 수 있다.
2. 객체의 타입 안정성을 높여준다.
3. 타입 체크와 형변환의 번거로움을 줄여줌으로써 코드가 간결해진다.
// int만 저장 가능하게 지네릭스 이용
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10); // OK
list.add(20); // OK
list.add(“30”); // 컴파일 에러. 타입 체크가 강화됨
list.add(30); // OK
Integer i = list.get(2); // i = 30, 지네릭스 덕분에 형변환 생략 가능
// 여러 타입의 객체를 담고 싶을 때는
ArrayList list = new ArrayList(); // 이렇게 쓰기 보다
ArrayList<Object> list = new ArrayList<Object>(); // 지네릭스를 꼭 이용하자.
[지네릭스 용어]
1. 타입 변수 (또는 타입 매개변수)
- 일반 클래스 중 Object를 포함하는 클래스들을 지네릭 클래스로 바꿀 때, Object타입 대신 E, T와 같은 타입변수를 사용한다. (E는 element, T는 type)
- 타입 문자는 보통 대문자 1자를 쓴다.
- 객체 생성시 타입 변수 대신 실제 타입을 지정한다.
- 타입 변수는 참조변수와 생성자에 써주고, 일치해야 한다.
- 실제 타입이 지정되면 형변환 생략이 가능하다.
public class ArrayList<E> extends ... { // 지네릭 클래스
private transient E[] elementData;
public boolean add(E o) { }
public E get(int index) { }
...
}
2. Box<T>
- 지네릭 클래스의 표현. T의 Box 또는 T Box라고 읽는다.
- 여기서 Box에 해당하는 클래스는 원시 타입(raw type)이다. 지네릭 클래스로 바뀌기 전 일반 클래스를 뜻한다.
class Box<T> { }
// T에 String 대입
Box<String> b = new Box<String>();
'Java' 카테고리의 다른 글
지네릭 클래스의 예시와 제한 (0) | 2022.11.14 |
---|---|
지네릭스와 다형성 (0) | 2022.11.09 |
Collections 클래스 (0) | 2022.11.08 |
HashMap, Hashtable 클래스 (0) | 2022.11.08 |
TreeSet 클래스 (0) | 2022.11.07 |