JAVA쪼렙탈출기: 배열 (Array)
Python과 SQL만 써본 주니어 분석가. '개발공부를 해보고 싶다', '개발도 공부하긴 해야하는데...'는 말만 한지 어연 1년이 넘어가는 중, 이대로는 안되겠다 싶어 냅다 JAVA 수업 수강에 카드를 긁었다. 쪼렙 중의 쪼렙이 JAVA를 배워나가는 여정을 "JAVA 쪼렙 탈출기"라는 시리즈로 남길 예정이다.
배열 (Array)
한 번의 선언으로 같은 타입의 데이터 공간을 메모리에 연속적으로 생성
- 배열 참조 변수 : [ ] 를 사용하여 배열 참조 변수를 생성한다.
int[] ar1; // 방법1
int ar2[]; // 방법2
배열 참조 변수를 생성하는 방법으로는 방법1, 방법2 모두 가능하나 방법1을 더 보편적으로 사용한다.
- 배열 객체 생성
ar1 = new int[3]
- 배열의 요소 사용 : 배열명[index]
배열 안에 하나의 요소를 사용할 때에는 index를 사용한다. index는 0부터 시작한다.
ar1[0] = 10; // ar1 배열의 첫 번째 요소에 10이라는 값 부여
배열 객체를 생성하면서 동시에 값을 넣어줄 수도 있다.
ar2 = new int[] { 1, 2, 1, 3 }
값을 설정하지 않을 때에는 배열은 생성과 동시에 배열 안의 모든 요소가 자료형의 기본값으로 초기화된다.
public class ArrayEx02 {
public static void main(String[] args) {
int[] it = new int[3];
System.out.println("it[0] : " + it[0]);
System.out.println();
double[] dt = new double[2];
System.out.println("dt[1] : " + dt[1]);
System.out.println();
char[] ct = new char[5];
System.out.println("ct[3] : " + ct[3]);
System.out.println();
}
}
[결과값]
it[0] : 0
dt[1] : 0.0
ct[3] :
값을 설정 안 하면 int일 경우엔 기본값인 0, float일 경우엔 기본값인 0.0이 나온다.
문자의 기본값은 아스키코드로 표현되는데, 이 때 기본값인 0이 아스키코드를 통해 문자화되면 NUL이기 때문에 우리의 눈엔 출력값이 없어서 에러가 아닌가 싶지만 정상적으로 기본값이 출력된 형태이다.
System.out.println("ct[3] : " + (int)ct[3]);
이렇게 int값으로 변환하여 출력해보면
ct[3] : 0
이라고 나오는 것을 볼 수 있을 것이다.
- 배열명.length : 배열의 사이즈를 알아낼 수 있다.
int[] iar = new int[5];
System.out.println("iar 크기 : " + iar.length);
[결과값]
iar 크기 : 5
배열값을 다른 배열에게 할당하면 어떻게 될까?
public class ArrayEx04 {
public static void main(String[] args) {
int [] arr = new int[3];
for(int i=0; i<arr.length; i++) {
arr[i] = i + 1;
System.out.println("arr[" + i + "] :" + arr[i]);
}
System.out.println();
int[] sub = arr;
sub[1] = 7;
System.out.println("sub[1] : " + sub[1]);
System.out.println("arr[1] : " + arr[1]);
}
}
위 코드의 sub[1] 값은 7일 것이다.
그러면 이 때 arr[1] 값은 얼마일까? 처음에 할당되었던 2일까? 아니면 sub[1] = 7 을 할당하는 순간 arr[1]도 7로 변할까?
정답은 arr[1] = 7 이다. arr[1]의 값 또한 7로 변한다.
이는 int[] sub = arr; 에서 arr의 배열값을 sub로 넘겼다는 걸 볼 수 있는데, 새로운 객체를 생성한 게 아니라 동일 객체를 공유하는 참조 변수만 2개가 된 것이라 그렇다.
강사님의 설명을 들으면서도 이 개념이 나는 많이 헷갈렸다. 동일 객체를 공유하는 공간(변수)만 2개가 되었다는 것을 잘 기억하고 있어야겠다!