2023. 11. 23. 21:05ㆍ프로그래밍 언어/Java
1. 배열의 생성
변수[] 변수이름; 으로 배열을 생성하고
변수이름 = new 타입[길이]; 로 배열 실제 저장공간을 생성한다.
간단하게 int [] score = new int [5];처럼 배열을 생성할 수 있다. 배열의 생성과정을 단계별로 살펴보자.
- int [] score;
int형 배열 참조변수 score를 선언한다. 아직 데이터를 저장할 수 있는 공간은 마련되지 않았다. - score = new int [5];
new 연산자를 통해 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다. 그리고 자동으로 각 배열 요소가 기본값으로 초기화된다. 끝으로 = 연산자에 의해 배열의 주소가 int형 배열 참조변수 score에 저장된다.
2. 배열의 길이
자바에서는 길이가 0인 배열도 생성이 가능하다! 나름 유용한 정보이므로 기억해 두고 넘어가자.
배열은 한번 생성하면 길이를 변경할 수 없다. 배열의 길이를 변경하려면 새로운 배열을 생성하고 기존 배열을 새로운 배열에 복사하는 방법밖에 없다. 혹은 이미 공간이 할당된 기존 배열에 다시 new를 적용하여 새로운 공간을 할당시킬 수 있지만 이 경우 기존 값에 접근할 수 없다.
3. 배열의 초기화
int [] score = new int [] {50, 60, 70, 80, 90};
int [] score = {50, 60, 70, 80, 90};
위의 두 방법으로 배열을 생성하면서 초기화할 수 있다. 괄호 안의 값의 개수에 의해 배열의 길이가 자동으로 결정된다. 주의할 점은 선언과 초기화를 따로 할 경우 new int []를 생략해선 안된다.
int[] score;
score = {50, 60, 70}; //오류
그리고 괄호 안에 아무것도 넣지 않으면 길이가 0인 배열이 생성된다. 참조변수의 기본 값은 null이지만, 배열을 가리키는 참조변수의 경우 null대신 길이가 0인 배열로 초기화하기도 한다.
4. 배열의 출력
int[] arr = {10, 20, 30, 40};
System.out.println(arr);
System.out.println(Arrays.toString(arr));
위의 방식처럼 배열을 출력할 수 있다. 여기서 주의해야 할 점이 첫 번째 방식처럼 배열을 그냥 출력하면 arr은 참조변수이므로 당연히 배열의 주소가 출력된다. 따라서 Arrays.toString() 메서드를 이용하여 배열의 요소를 출력할 수 있다. 예외적으로 char 배열은 println메서드로 그냥 출력하면 각 요소가 구분자 없이 그대로 출력된다.
5. 배열의 복사
배열의 복사는 어떻게 할 수 있을까? 가장 먼저 떠올릴 수 있는 방법은 두 가지 정도가 있다.
- 얕은 복사
새로운 배열을 만들고, for문을 통해 값들을 하나하나 복사하면서 값만 복사하는 방법이 있다. - 깊은 복사
참조변수에 그대로 대입하는 방법이 있다. int [] arr2 = arr;과 같이 복사하게 되면 arr2가 arr과 같은 주소를 가리키므로 완전히 같은 배열을 가지게 된다. 여기서의 완전히는 arr2 [i]의 값을 변경하면 arr [i]의 값도 변경될 만큼 같다는 뜻이다.
이런 방법도 있지만 for문보다 System.arraycopy()를 사용하는 것이 효율적이다. arraycopy()는 매개변수를 차례대로 어느 배열의 몇 번째 요소에서 어느 배열로 몇 번째 요소로 몇 개의 값을 복사할 것인지 지정해줘야 한다.
System.arraycopy(arr, 0, newArr, 0, arr.length);
위와 같이 사용하면 배열 arr [0]에서 newArr [0]으로 arr.length만큼 데이터를 복사한다는 뜻이다.
이를 활용하면 두 배열을 합쳐서 하나의 배열로 만드는 것도 가능하다.
public class ArrayMergeExample {
public static void main(String[] args) {
// 첫 번째 배열
int[] array1 = {1, 2, 3, 4, 5};
// 두 번째 배열
int[] array2 = {6, 7, 8, 9, 10};
// 두 배열을 합칠 새로운 배열 생성
int totalLength = array1.length + array2.length;
int[] mergedArray = new int[totalLength];
// 첫 번째 배열 복사
System.arraycopy(array1, 0, mergedArray, 0, array1.length);
// 두 번째 배열 복사
System.arraycopy(array2, 0, mergedArray, array1.length, array2.length);
// 합쳐진 배열 출력
System.out.print("Merged Array: ");
for (int num : mergedArray) {
System.out.print(num + " ");
}
}
}
6. String 배열
String 타입 변수는 원래 참조 변수이지만 int 배열의 선언과 생성방법과 똑같은 방식을 가진다. 다만 초기화 방법이 약간 다르다.
String[] name = new String[2];
name[0] = new String("Hello");
name[1] = "World";
이런 식으로 new 연산자를 생략하여 초기화할 수 있다. 이 경우 메모리는 아래의 그림처럼 형성된다.
7. String 클래스
String클래스는 char배열에 메서드를 추가한 것이다. 주요 메서드 몇 가지만 알고 가자.
- String substring(int from, int to) : from ~ to의 문자열을 반환한다. to는 범위에 포함되지 않는다.
- boolean equals(Objects obj) : 문자열의 내용이 obj와 같은지 확인한다.
8. 다차원 가변 배열
자바에서는 2차원 이상의 배열을 배열의 배열 형태로 처리한다. 따라서 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고 각기 다른 길이의 배열을 생성할 수 있다.
int[][] score = new int[3][];
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
위와 같은 방식으로 각 행마다 길이가 다른 배열을 생성할 수 있다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[JAVA] 객체지향언어 - 오버로딩과 생성자, this, this()를 구별하자. (1) | 2023.11.27 |
---|---|
[JAVA] 객체지향언어 - 클래스와 객체, 클래스와 인스턴스를 잘 구분하자. (2) | 2023.11.24 |
[JAVA] 연산자 활용과 난수 구하기, 반복문 지정하여 탈출하기 (0) | 2023.11.23 |
[JAVA] 정수형과 실수형 - 정밀도를 주의하자! (1) | 2023.11.11 |
[JAVA] 변수의 타입과 입출력 (1) | 2023.11.02 |