
이번 글에서는 JAVA에서의 배열에 대해 알아보자. 우선 JAVA의 배열의 성질중에 중요한 것은 정적배열이라는 것이다. JAVA에서는 배열을 선언할때 length를 선언할 수 있는데, 1번 선언한 length는 변경할수 없다.
public class Main{
public static void main(String[] args){
int[] num = new int[n];//단 여기서 n은 length이다
int[] num = {1,2,3};
}
}
첫번째 배열선언은 원소는 건들지 않은채 length만을 선언하여 배열의 원소는 모르는 상태이고, 2번쨰 배열선언은 배열의 원소 1,2,3을 넣어주고 length=3으로 둔 케이스이다. 그래서 1번 배열은 각 원소마다 선언해줘야한다. 1번째는 원소가 가변적일때 2번째는 원소가 불변적일때 사용한다.
그럼 배열의 원소가 length를 초과 해버린다면 어떨까? 당연히 JVM상에서 오류를 뱉는다.
public class java2_1_1 {
public static void main(String[] args) {
int[] num = new int[4];
int[] num3 = {1,2,4};
int[] num2 = new int[num.length+1];
num[1] = 1;
num[2] = 2;
num[0] = 0;
num[3] = 3;
num[4] = 4;//ArrayIndexOutOfBoundsException발생
}
}

그럼 size를 바꿔서 배열을 사용하고 싶다면 어떨까? 당연히 ArratList패키지를 쓰는게 정신건강에 이롭다.
하지만 공부를 하는 입장에서 ArrayList는 나중에 알아보고 우린 배열로 새롭게 접근하여 보자.우선 try-catch문을 활용해서 ArrayInedexOutOfBoundsException이 발생할때 새로운 length가 1 더 큰 배열을 만들어 복사해보자.
public class java2_1_1 {
public static void main(String[] args) {
int[] num = new int[4];
int[] num2 = new int[num.length+1];
num[1] = 1;
num[2] = 2;
num[0] = 0;
num[3] = 3;
try{
num[4] = 4;
}catch(ArrayIndexOutOfBoundsException e){
for(int j = 0 ; j < num.length ; j++){
num2[j] = num[j];
}
num2[4] = 4;
}
for(int i = 0 ; i < num2.length;i++){
System.out.println(num2[i]);
}
}
}
결과값은 0,1,2,3,4로 잘 작동한다. 하지만 이 코드는 쓸데없는 배열이 1개가 발생한다는게 단점인데 이는 추후 큰 프로젝트를 진행한다면 JAVA에서 가비지컬렉션이 자동으로 처리해주니 걱정하지말자.(C는 수동으로 해제해줘야하는데...JAVA만세)
배열을 복사하는 법은 System.arraycopy()를 활용하거나 clone()을 활용하는 법인데 이는 따로 패키지를 다룰때 알아보자.
'자료구조' 카테고리의 다른 글
| 자바 자료구조(3) (1) | 2025.08.15 |
|---|---|
| JAVA자료구조(2) (1) | 2025.08.14 |