훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
배열이 메모리에 생성되는 방식
1차원 배열
int [] intArr = {1,2,3,4}

2차원 배열
int [][]intArr = {{1, 2}, {3, 4}};

이 외 3차원... 으로 나아가는 배열도 마찬가지입니다.
배열과 for문
자바에서는 배열이 단순 연속된 메모리의 형태가 아니라 객체 형태로 저장이 되기 때문에,
length라는 메서드를 제공합니다. (배열에 원소가 몇 개 있는지 알 수 있음)
그래서 제공하는 메서드를 사용하여 (index out of bound 등을 예방할 수 있음)
for 반복문을 사용하는 경우가 많습니다.
//일차원 배열
int[] intArr = {1,2,3,4};
for (int i = 0; i < intArr.length; i++) {
System.out.println(intArr[i]);
}
//이차원 배열
int[][] intArr = {{1,2},{3,4}};
for (int i = 0; i < intArr.length; i++) {
for (int j = 0; j < intArr[i].length; j++) {
System.out.println(intArr[i][j] + " ");
}
}
위와 같이 사용하는 것이 일반적입니다.
또한 위와 같이 사용한다면 "ragged array"를 다루는 데도 효율적입니다.

위 그림처럼 배열이지만 그 길이가 일정하지 않은 것을 ragged array라고 합니다.
위와 같은 배열을 index로 사용한다면 out of bound에러가 뜰 확률이 높아지겠죠?
하지만 위에서 소개드렸던 for문으로 사용하면, 그럴 일이 없습니다.
public static void main(String[] args) {
int num = 1;
int[][] intArr;
intArr = new int[2][];
intArr[0] = new int[3];
intArr[1] = new int[4];
for (int i = 0; i < intArr.length; i++) {
for (int j = 0; j < intArr[i].length; j++) {
intArr[i][j] = num++;
System.out.print(intArr[i][j] + " ");
}
System.out.println("");
}
}
위는 ragged array를 만들고, 다루는 방법입니다. intArr, intArr[0], intArr[1] 하나하나가 레퍼런스 변수이기 때문에
얼마나 길이를 할당할지는 프로그래머가 결정할 수 있기에,. length를 사용하는 습관을 들이는 것이 좋겠습니다.
for-each
String[] strArr = {"안녕", "하세요", "반갑습니다"};
for (String str : strArr) {
System.out.println(str);
}
자바에서 위와 같이 사용하는 문법을 for-each문이라고 합니다.
배열을 하나씩 돌면서 str에 값을 할당해줍니다. (값을 복사합니다)
그러므로 for문 안에서 값을 변경한다고 해도, 원래 배열에 영향을 주지 않습니다.
'Java' 카테고리의 다른 글
클래스와 객체(미완성) (0) | 2021.04.06 |
---|---|
예외 처리 (0) | 2021.04.06 |
레퍼런스 변수와 메모리, 에러 (0) | 2021.03.30 |
Scanner로 키보드 입력 받기 (0) | 2021.03.23 |
타입 변환 (0) | 2021.03.23 |