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 i0번째의 값을 원할 때 하기를 레퍼런스(참조)한다.

index i1번째의 값을 원할 때 하기를 레퍼런스(참조)한다.

index i2번째의 값을 원할 때 하기를 레퍼런스(참조)한다.

i[]주소

10

20

30

i(배열)

i[0]
*메모리 주소 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; //arrArt1arrArt2의 배열값이 저장 되어 있는 주소가 같다

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]; // 32

-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

+ Recent posts