오늘은 자바의 배열을 소개해보겠다.
가장 먼저 자바에서의 배열은 객체이다.
C언어에서 배열은 스택(Stack)영역에 생성할 수 있었다. 마치 지역변수처럼 말이다.
하지만, 자바에서는 무조건 힙(Heap)영역에 생성해서 사용해야 한다. 그 말은 객체로 생성해야 한다는 의미이다.
아래의 3칸짜리 int형 배열 객체를 생성하는 코드를 보자.
int[] arr = new int[3];
여기서 배열의 각 칸에는 무슨 값이 들어있을까? 우린 분명히 초기화를 한 적이 없다.
모든 객체는 생성 시에 초기화를 하지 않으면 멤버 변수를 0에 해당하는 값으로 초기화를 시킨다.
여기서 int형은 0, double형은 0.0, boolean형은 false, 참조형은 모두 null로 자동 초기화가 된다.
System.out.println(arr.length);
자바의 멤버 변수 중에 배열의 길이 값을 가지고 있는 변수가 있다.
length는 말 그대로 변수이다. String 클래스의 length()같은 함수가 아니다.
이 변수는 예상하다시피 반복문에 사용할 수 있다.
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
맨 위의 코드는 배열을 생성하는 가장 기본적인 코드이다. 하지만, 배열 선언을 아래처럼 다르게 할 수도 있다.
int[] arr2 = new int[] {100,200,300};
int k = 3;
int[] arr3 = new int[k];
int[] arr5 = new int[0];
int m = 5;
int[] arr6 = new int[] {m, m+1, m*2};
int[] arr7 = {10,20,30};
arr2는 선언 시 배열의 요소 값을 초기화하는 코드이다. 이 때, 배열 길이는 적지 않는다.
또한, 배열 객체를 생성 시 초기화도 없이 길이 지정도 하지 않으면 에러이다.
C언어와 달리 배열의 길이를 변수로 지정하는 방법도 있다.
arr3가 바로 그 코드이다.
arr5는 보다시피 길이가 0인 배열을 만드는 코드이다.
arr6는 배열의 요소 값들을 변수 값으로 초기화한 코드이다.
arr7은 String객체를 생성할 때 축약 표현을 사용했던 것처럼 축약 표현을 사용한 것이다. 이 때, new int[] {10, 20, 30};를 한 것과 같다.
이번에는 원본 배열객체를 복사해 새로운 배열객체를 만드는 예제이다.
int[] arr10 = new int[] {50,60,70};
int[] arr11 = new int[arr10.length];
여기까지만 하면 arr11의 길이만 지정했기 때문에 3칸짜리 배열이 되어있을 것이고, 각 칸에는 0이 들어가 있을 것이다.
그래서 arr10의 각 요소 값을 arr11에 넣어주어야 한다.
for (int i = 0; i < arr10.length; i++) {
arr11[i] = arr10[i];
}
이 때 물론 가지고 있는 요소 값은 같지만 당연하게도 arr10과 arr11은 전혀 다른 객체이다.
이번에는 많이들 헷갈려할 수있는 참조형 변수의 배열 예제이다.
String[] bbb = new String[3];
이 코드처럼 문자열 배열 객체를 생성하면 각 String은 0에 해당하는 값. 즉, null을 가지고 있다.
bbb[0] = new String("Hello");
bbb[1] = new String("Nice");
bbb[2] = "Android";
이렇게 배열의 각 요소 값을 대입해주고 만약 0번 칸에 있는 문자열의 길이를 알고 싶다면 어떻게 해야할까?
혹은 특정 문자를 가져오고 싶다면 어떻게 해야할까?
System.out.println(bbb[0].length());
char ch = bbb[0].charAt(1);
System.out.println(ch);
위의 코드처럼 해당 문자열의 길이를 가져오고 1번 인덱스의 문자를 가져올 수 있다.
그리고, 참조 변수 배열도 초기화가 가능하다.
String[] ddd = new String[] {new String("Hello"), new String("Nice"), "Android"};
String[] fff = {"Hello", "Nice", "android"};
String을 예로 들었는데, 사실 ddd배열처럼 각자 new String()을 해야하는 것이 맞지만
특이하게 String은 축약 표현이 가능하므로 fff처럼 선언할 수도 있다.
'Language > Java' 카테고리의 다른 글
자바의 패키지 (0) | 2022.03.07 |
---|---|
자바의 클래스 소개 (0) | 2022.03.02 |
Java에서의 String 소개 - 3 (0) | 2022.02.15 |
Java에서의 String 소개 - 2 (0) | 2022.02.11 |
Java에서의 String 소개 - 1 (0) | 2022.02.09 |