Vector.class 참고.
Vector를 공부하던 중,
Vector 는 기본적으로 생성할 시에 10이라는 Object 배열을 생성한다.
11번째의 Object가 Vector에 추가 될 시에 10이었던 Object 배열은 원래 크기의 2배인 20으로 증가를 하고, 원래 10크기에 있었던 데이터는 새로운 20크기의 배열에 깊은복사를 하게 되고, 시간이 지나면 GC에 의해 정리가 된다.
사실 그렇게 된다면 Vector에 있는 Object 형 배열은 20크기가 되는데.
Vector에 대해서 size()를 찍어보면 11번째의 Object가 들어간 상태에서 11이라는 크기가 나오는 것에서 의문점이 시작이 되었다.
분명히 Object형 배열은 하나뿐인데 (protected Object[] elementData), protected접근제한자로 내가 당장 상속받지않고 접근해볼 방법은 없으니, 한가지 실험아닌 실험을 해 보았다.
Vector v를 선언하고 , 성공적으로 11번째까지 데이터를 입력을 해 본 뒤.
v.get(12)를 해보았더니, 제목에 있는 그 익셉션이 발생,
미취학 아동일 당시 유행했던 게임북을 제법했던 경험을 토대로 열심히 F3을 눌러가며 의심가는녀석들을 찾아가본 결과...
public synchronized E get(int index) { if (index >= elementCount) throw new ArrayIndexOutOfBoundsException(index); return elementData(index); }
이녀석을 찾을 수 있었으며,
elementCount 는 add나 remove 같은 활동이 있을시 증감이 되며, 사용자가 접근하는 elementData[]는 자체적으로 배열의 실제 크기가아닌 elementCount에 따라 ArrayIndexOutOfBoundsException을 발생시키고 말고를 한다는 것을 알 수 있었다.
'Programming > Java' 카테고리의 다른 글
실생활에서 쓸수있을만한 객체기반 반복문, 조건문 예제. (0) | 2019.03.07 |
---|---|
자바의정석2판 List관련 예제 11-6 (0) | 2019.01.17 |
Calendar class 활용하기 (0) | 2018.12.31 |
Integer를 이용한 진법바꾸기로 간단한 예제 만들기 (0) | 2018.12.31 |
Integer를 이용하여 진법변환하기 (0) | 2018.12.31 |