본문 바로가기
언어/java

[Java] 5. 참조 타입 (3) - 7~10

by 젼젼39 2025. 3. 16.

5.7 다차원 배열

    : 배열 항목에 또 다른 배열이 대입될 수 있음

1) 값 목록으로 생성

    : 배열 변수 선언 시 타입 뒤에 대괄호[ ]를 차원의 수만큼 붙이고, 값목록도 차원의 수만큼 중괄호를 중첩 

int[][] scores = {      //타입[반][번호] 변수, 타입[1차원][2차원] 변수
    {80, 90, 100},      //1차원 배열의 0 인덱스 = 첫번째 반 성적
    {30, 40, 50}        //1차원 배열의 1 인덱스 = 두번째 반 성적
}

 

 2) new 연산자로 생성

    : 배열 변수 선언 시 타입 뒤에 대괄호[ ]를 차원의 수만큼 붙이고, new 타입 뒤에도 차원의 수만큼 대괄호[ ]를 작성

- 마지막 차원의 항목의 값은 초기값 가짐 (0 / 0.0 / false / null)

    1. 2차원 배열의 길이가 같은 경우

int[][] scores = new int[2][3];

    2. 2차원 배열의 길이가 다른 경우

int[][] scores = new int[2][]; //먼저 1차원 배열의 길이를 2로 해서 생성
scores[0] = new int[3]; //각각의 항목 값으로 길이가 다른 2차원 배열 대입
scores[1] = new int[2];

 

 

 

5.8 객체를 참조하는 배열

- 기본 타입 배열은 각 항목에 값을 직접 저장
- 참조 타입 배열은 각 항목에 객체의 번지를 저장

- 배열 항목이 참조하는 객체가 같은 객체인지 여부 확인 시에는 ==, !=
- 문자열만 비교할 때에는 equals() 메소드 사용

 

 

 

5.9 배열 복사

- 배열은 한 번 생성하면 길이 변경이 불가능하기에, 더 많은 저장 공간 필요 시 더 큰 길이의 배열을 새로 만들고 이전 배열로부터 항목들을 복사

- 복사되지 않은, 배열의 나머지 항목들은 초기값 그대로

1) for문 사용

    : 항목 하나씩 읽고 새로운 배열에 저장

int[] arr1 = {1,2,3};
int[] arr2 = new int[5];    //길이
for (int i = 0; i<arr1.length; i++){
    arr2[i] = arr1[i];
}

 

2) arraycopy() 메소드 사용

System.arraycopy(원본배열, 원본배열 복사시작 인덱스, 새 배열, 새 배열 붙여넣기시작 인덱스, 복사항목 수);
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

- 원본 배열이 arr1이고 새 배열이 arr2인 경우 arr1의 모든 항목을 arr2에 복사하려면

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

* 항목의 값이 String 객체의 번지이므로, 번지 복사가 되어 참조하는 String 객체는 변함 없음
(동일한 번지 가리키고 있으니까)

 

 

5.10 배열 항목 반복을 위한 향상된 for문

- 배열의 길이 고려하지 않아도 됨
- 카운터 변수와 증감식 사용하지 않고, 항목의 개수만큼 반복 후 for문 나감

int[] scores = {90, 80, 70, 60, 50};
int sum = 0;
for(int temp : scores) {
    sum = sum + temp
}

for ( (2)타입 변수 : (1)배열 ) {
    (3)실행문
}

 

* for문 실행 시

(1)배열에서 가져올 항목이 있는 경우 (2)변수에 항목 저장, (3)실행문 실행

(1)배열에서 가져올 다음 항목이 없으면 for문 종료

 

'언어 > java' 카테고리의 다른 글

[Java] 6. 클래스 (2) - 5~7  (0) 2025.03.22
[Java] 6. 클래스 (1) 1~4  (0) 2025.03.22
[Java] 5. 참조 타입 (2) - 5~6  (1) 2025.03.16
[Java] 5. 참조 타입 (1) - 1~4  (0) 2025.03.16