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

7강 배열

-데이터를 관리하기 위한 가장 기본적인 방법

-다수의 데이터를 인덱스를 이용해서 관리

 

7-1 배열이란?

-인덱스를 이용해서 자료형이 같은 데이터를 관리

-데이터를 여러개로 나열해서 한번에 인덱스(0 ~ n-1 번호로)을 붙여서 관리한.

-배열의 길이(n)=배열크기

데이터

데이터

데이터

데이터

데이터

데이터

데이터

데이터

데이터

데이터

데이터

번호

1

2

3

4

5

6

7

8

9

10

인덱스

(실제

관리하는 번호)

0

1

2

3

4

5

6

7

8

9

배열길이 : n

*데이터가 10개라면 배열의 길이는 10개라고 볼 수 있다. 인덱스는 0부터 9까지 있다.

 

배열 사용 예)

*(비교)변수는 데이터 하나만을 관리 할 수 있었다.

변수의 예) int a =10 데이터 하나만을 10에 넣어서 관리했다.

 

배열사용 예

아파트 호수 관리 : 101, 201, 301....401, 501

회사 사번 관리 : 홍길동(k-0001), 홍길자(k-0002), 홍길순(k-0003)....

학급 학생 관리 : 박찬호(01), 이승엽(02), 박용택(03), 홍성훈(04)

 

 

 

7-2 배열 선언 및 초기화

배열

-변수와 마찬가지로 선언과 초기화 과정을 거쳐 사용한다.

-배열 선언과 초기화를 동시에 사용이 가능하다.

배열 선언 후 초기화

배열 선언과 초기화를 동시에

int[] art1 = new int[5]

art1[0] = 100;

art1[1] = 200;

art1[2] = 200;

System.out.println("arr1[0]:" + arr1[0])

System.out.println("arr1[1]:" + arr1[1])

int[] art2 = {10, 20, 30};

System.out.println("art2[0] : " + arr2[0]

System.out.println("art2[1] : " + arr2[0]

System.out.println("art2[2] : " + arr2[0]

*배열의 선언과 초기화 할 때 배열은 다수 데이터를 인덱스로 한번에 관리한다.

그 데이터 안에 자료형이 있다. 자료는 동일해야 한다.

예를 들어 char이면 charintint형 으로 데이터를 입력해야 한다.

(int형에 char형에 해당하는 문자를 넣으면 에러가 발생한다.)

 

배열 선언 및 초기화 순서

a. int -> 배열 안에 들어가는 데이터 자료 형을 먼저 정하기

b. [] -> 배열기호(배열변수를 선언하는 기호)

c. arr1 -> 배열이름

d. new -> new라는 연산자 키워드

e. int[5] -> 배열의 크기를 명시, 배열의 크기만큼 메모리를 확보했다는 의미

f. arr1[0] = 100; 첫 번째 인덱스에 순서와 값을 넣는다, 그 다음 순서 이어서...

 

배열선언 및 생성

int[] arr1 = new int[5];

*이렇게도 가능

int[] arra1; ->배열선언

arr1 = new int[5]; -> 배열 생성

배열의 초기화

arr1[0] = 100;

arr1[1] = 200;

 

출력명령어

System.out.println("arr1[0] : " + arr1[0]);

System.out.println("arr1[1] : " + arr1[1]);

 

출력값

arr1[0] : 100

arr1[0] : 200

*선언/초기화/메모리배열이 정상적으로 만들어졌다고 볼 수 있다.

*자바에서의 배열은 한번 크기가 정해지면 변경 될 수가 없다.

*내가 찾아본 자료

반복문을 이용하여 출력 가능

)

int[] grades = new int[5];

 

grades[0] = 90;

grades[1] = 93;

grades[2] = 100;

grades[3] = 85;

grades[4] = 99;

 

for (int I = 0; i<5; i++) {

System.out.println(grades[i]);

}

 

*import 하는 방법

import 할 파일이 d드라이브가 아닌

c드라이브에 있다고 할 때에 workspace를 변경해야 한다.

file->Switch Workspace->C:\ + 프로젝트가 있는 경로 누르기

 

마우스 우클릭-> import

 

 

7-3 배열을 이용한 학사관리

String[] name = {“박찬호”, “이승엽”, “박병호”, “이병규”, “류현진”};

//String ->자로형이 문자열로 만들어진 배열

int[] score = new int[5];

Scanner scanner = new Scanner(System.in); //->객체 생성을 해서 사용을 함.

//Scanner -> 사용자로부터 무언가(데이터)를 받을 때 사용하는 클래스

 

System.out.printf("%의 점수를 입력하시오. : “, name[0]);

//박찬호의 점수를 입력하시오 라는 뜻

 

score[0] = scanner.nextln();

//->사용자가 데이터 입력하기를 기다린다. 점수를 입력하면 score 배열 인덱스0에 점수가

들어가게 된다.

//scaner가 데이터를 입력 받는 곳

 

scanner.close(); //->리소스를 클로즈 해주고 반환하는 명령어

 

학사관리 실습

import java.util.Scanner 입력

 

 

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200310 9강 조건문  (0) 2020.06.14
20200309 8강 배열과 메모리  (0) 2020.06.14
20200305 6-2강 연산자  (0) 2020.06.14
20200305 6강 연산자  (0) 2020.06.14
20200304 5강 특수문자와 서식 문자  (0) 2020.06.14

+ Recent posts