8강 배열과 메모리
-다수의 데이터를 인덱스로 관리하는 것을 배열이라고 한다.
-배열은 요소들의 집합
8-1 배열의 메모리 크기
-배열을 구성하는 데이터의 자료형에 따라서 배열의 메모리 크기가 결정 된다.
int[] arr = new int[3];
*int형 데이터가 3개 있다.
*int형 하나가 4byte 이므로 총 메모리의 크기가 12byte인 배열이 만들어진다.
8-2 배열을 가리키는 배열이름
-기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있다.
*객체 자료형은 다른 곳에 객체를 만들고 변수에는 메모리주소(레퍼런스)만 가지고 있다.
데이터 구조(저장)관점
변수 i
int i = 10;
배열 i
int [] i = new int[3];
-int형 배열 i 안에 데이터가 3개 있다.
-i안에 데이터가 전부 다 들어가는 것이 아니라 전체 큰 메모리에서 데이터가 따로따로 데이터가 들어가 있다.
-i라는 메모리는 별개로 다른 곳에 존재한다.
-그럼 i(배열) 라는 메모리에는 무엇이 들어 있는가?
10,20,30를 시작하는 메모리 첫 번째 주소만 배열 i에 저장이 되어 있다.
|
index i의 0번째의 값을 원할 때 하기를 레퍼런스(참조)한다. |
index i의 1번째의 값을 원할 때 하기를 레퍼런스(참조)한다. |
index i의 2번째의 값을 원할 때 하기를 레퍼런스(참조)한다. |
i[]주소 |
10 |
20 |
30 |
i(배열) |
i[0] |
i[1] |
i[2] |
8-3 배열 기본속성
-기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있다.
1. 배열의 기본 속성
int[] arrArt1 = {10, 20, 30, 40, 50, 60};
*위에 명령어는 선언과 초기화를 동시에 하고 있다.
*초기화 하는 데 데이터 값 10,20,30,40,50,60
*배열의 크기 6, [](인덱스)는 0-5까지, 숫자는 기초자료형으로 10,20,30,40,50,60이 들어있다.
null이란
-배열을 만들지 않아 주소가 담겨져 있지 않은 상태를 null이라고 한다.
int[] arrArt2 = null;
*위에는 배열의 시작하는 주소를 배열 i(int[] i = new int[];)에 넣어 두어야 하는데 아직 배열을 만들지 않아 주소가 담겨져 있지 않은 상태를 null이라고 한다.
int[] arrArt3 = null;
2.배열의 길이를 얻어내는 명령어
int[] arrArt1 = {10, 20, 30, 40, 50, 60};
System.out.println("arrArt1.length : " + arrArt1.length);
->arrArt1.length : 6
*배열의길이 출력하는 명령어 arrArt1.length
출력
3. 배열요소 출력하는 명령어
int[] arrArt1 = {10, 20, 30, 40, 50, 60};
System.out.println("arrArt1 : " + Array.toString(arrArt1));
->arrArt1 : {10, 20, 30, 40, 50, 60}
*Array.toString(arrArt1));
4. 배열 요소 복사하는 명령어
arrArt3 = Arrays.copy0f(arrArt1, arrArt1.length); //복사하려는 배열, 배열의 크기입력
System.out.println("arrArt3 : " + Array.toString(arrArt3));
->arrArt3 : {10, 20, 30, 40, 50, 60}
*배열1의 값을 복사 한다라고 보아야 한다.
배열1의 값을 복사해서 어딘가의 메모리에 저장한 주소를 arrArt3이 참조한다.
그러므로 arrArt1의 메모리주소와 arrArt3의 메모리주소는 다르다.
5. 배열 주소(레퍼런스)를 출력하는 명령어
레퍼런스 - 배열의 값이 저장 되어 있는 주소를 레퍼런스라고 한다.
arrArt2 = arrArt1; //arrArt1과 arrArt2의 배열값이 저장 되어 있는 주소가 같다
System.out.println("arrArt1 : " + arrArt1);
=>I@4554617C
System.out.println("arrArt2 : " + arrArt2);
=>I@4554617C
System.out.println("arrArt3 : " + arrArt3);
=>I@74a14482
8-4 다차원 배열
-이전까지는 1차원 배열을 알아보았지만, 3차원,4차원 다차원 배열이 있다.
다차원 배열
-배열의 각 요소안에 또다시 배열이 들어간다는 개념
-2차원 배열까지는 사용하지만
-3차원 배열은 거의 사용하지 않는다. 이유는 너무나 많은 메모리를 사용하게 되므로 퍼포 먼스가 나오지 않고, 로직이 복잡해질 수 있다.
int[] arrArt1 = {10, 20, 30);
*10안에 100이라는 배열값이 있다. 행 열 개념으로 존재
|
2열(2차원 배열) |
|
3행 |
10 |
100 |
20 |
200 |
|
30 |
300 |
int[][] arrMul = new int[3][2]; // 3행 2열
-2차원 배열을 하기처럼 값을 넣어준다. 행 열로 개념으로 접근한다.
-arrMul[0],[1],[2] -> 3행
-arrMul[0],[1] ->2열
arrMul[0][0] = 10; //0행의 0번째 값 출력
arrMul[0][1] = 100; //0행의 1번째 값 출력
arrMul[1][0] = 20; //1행의 0번째 값 출력
arrMul[1][1] = 200; //1행의 1번째 값 출력
arrMul[2][0] = 30; //2행의 0번째 값 출력
arrMul[2][1] = 300; //2행의 1번째 값 출력
System.out.println("arrMul[0] : " + Arrays.toString(arrMul[0]));
=>arrMul[0] : [10, 100]
System.out.println("arrMul[1] : " + Arrays.toString(arrMul[1]));
=>arrMul[1] : [20, 200]
System.out.println("arrMul[2] : " + Arrays.toString(arrMul[2]));
=>arrMul[2] : [30, 300]
'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글
20200311 10강 반복문 (0) | 2020.06.14 |
---|---|
20200310 9강 조건문 (0) | 2020.06.14 |
20200306 7강 배열 (0) | 2020.06.14 |
20200305 6-2강 연산자 (0) | 2020.06.14 |
20200305 6강 연산자 (0) | 2020.06.14 |