배열은 연관된 data를 관리하기 위한 수단이다. 그런데 배열에는 몇가지 불편한 점이 있는데 그 중의 하나가 한번 정해진 배열의 크기는 변경할 수 없다는 점이다.
<코드1.1> <코드1.1>처럼 처음에 선언한 배열의 크기를 벗어나면 오류가 발생한다. 이러한 불편함을 "컬렉션 프레임워크"를 사용하면 줄어든다. 아례의 예를 살펴보자. <코드1.2> <코드1.1>처럼 배열은 크기를 한번 지정하면 크기보다 많은 수의 값을 저장할 수 없다는 것을 확인했다. 하지만 <코드1.2>를 보면 ArrayList는 크기를 미리 지정하지 않아도 많은 수의 값을 저장이 가능하다. 배열을 사용할 때 배열의 길이를 구할 때는 .length를 사용했지만 ArrayList에서는 size() 메서드를 호출한다. 또한 특정한 값을 가져올 때 배열은 [인덱스 번호]를 사용했지만 ArrayList는 get(int index) 메서드를 호출한다. get() 메서드의 인자 값 으로 인덱스 번호를 입력하면 인덱스 값에 해당하는 값을 추출할 수 있다. 그런데 ArrayList를 사용할 때 주의해야 할 점이 있다. <코드1.2>의 21~23 라인의 코드를 아래처럼 변경해보겠다. <코드1.3> <코드1.3>을 컴파일하면 오류가 발생한다. 왜냐하면 ArrayList의 add() 메서드는 인자 값으로 어떤 형태의 값이 올지 알 수 없다. 즉, byte, short, int, long, char, stirng 등등 모든 타입이 입력 가능하다는 것이다. 그런데 get() 메서드를 사용하여 값을 추출한 후에 String 타입에 저장하기 때문에 오류가 발생한다. ( add() 메서드는 인자 값으로 모든 데이터의 조상인 Object 타입으로 데이터를 받는다. ) 현 상황에서 오류를 해결하기 위한 방법은 아래 코드처럼 2가지 방법이 있다. <코드1.4> 첫 번째 방법은 get() 메서드의 반환 값을 String타입으로 형변환 시켜주는 것이고 두 번째 방법은 get() 메서드의 반환 값과 ""(문자열)을 덧셈 연산을 해주는 것이다.(어떠한 타입 + String 타입 = String 타입이되기 때문이다.) 하지만 위의 방식은 예전의 방식이다. 이제는 아래와 같이 Generic(제너릭)을 사용해야 한다. <코드1.5> 제너릭을 사용하면 ArrayList 내에서 사용할 데이터 타입을 인스턴스를 생성할 때 지정할 수 있기 때문에 데이터를 추출 할 때 굳이 형변환 또는 문자열 덧셈 연산을 하지 않아도 된다.
cs
cs
cs
cs
cs
'언어 > JAVA' 카테고리의 다른 글
[Java] 클래스 / 인스턴스 / 지역변수 쉽게 이해하기 (0) | 2019.11.26 |
---|---|
[Java] 스캐너(Scanner)클래스 사용 방법 (0) | 2019.11.26 |
[JAVA] HashMap 컬렉션 클래스 사용 방법 (0) | 2018.03.28 |
[JAVA] Enumeration, Iterator, ListIterator 인터페이스 사용 방법 (0) | 2018.03.22 |
[JAVA] Vector 클래스 사용 방법 (0) | 2018.03.21 |