이론/자바 기초

Java 그게 뭐야? 10. 배열, 중첩for문

달거북씨 2022. 2. 18. 12:23

1. 배열

배열

같은 자료형의 여러 변수를 하나의 묶음으로 나열해 놓은 것

- 여러 개의 저장공간을 배열을 통해 한 번에 선언하여 관리한다.

- 규칙성이 없는 값에 규칙성을 부여한다.(Index 번호 자동부여)

- [] 대괄호 사용

- 배열은 0부터 시작

 

1) 배열의 선언(배열을 다루기 위한 참조변수(배열명)가 선언만 된 상태)

자료형[] 배열명;

int[] arData;

 

2) 배열의 생성(실제 저장공간을 생성한 상태)

배열의 이름 = new 자료형 [칸 수];

arData = new int[5]

>> 배열을 선언하고 생성하는 과정. 선언과 생성을 동시에도 가능하다.

>> 자료형[] 배열명 = new 자료형[칸 수];

     int [] arData = new int [5]; > arData라는 배열에 5칸짜리 저장공간 생성된다. 값이 없는 빈 저장공간이다.

                                               > new 연산자가 반환한 주소값(배열에 부여되는 고유값)이 arData에 부여된다(ex.0x100)

                                               > 또한 각 배열의 요소에 번호가 자동으로 붙는다. > 배열의 인덱스 번호

 

3) 배열의 초기화

자료형[] 배열명 = {값1, 값2, 값3, 값4, ...}; > 선언과 생성, 초기화까지 한 번에 가능

int[] arData = {1, 2, 3, 4, 5}; > 5칸짜리 저장공간이 생성되면서 값까지 부여된다.

4) 배열의 사용

배열명[index] = 값;

System.out.println(배열명[index]);

arData[2]   // 3

 

 

예제

arData2.length = arData2 배열의 저장공간 수(길이) = 7

 

 

length

배열의 길이 구하기

배열명.length > 정수

배열을 선언하면, length라는 상수(변하지 않는 값)가 선언되어 배열의 길이가 담긴다. 따라서 배열의 길이는 한 번 선언하면 실행되는 동안 바꿀 수 없다.(만약 배열의 공간이 부족할 경우 더 큰 배열을 만들어서 기존의 배열을 복사해야 한다.)

 


 

2. 2차원 배열

2차원 배열

배열 안의 배열(가로 행, 세로 열)

1차원 배열의 배열(1차원 배열 여러 개를 하나로 묶어 놓은 것)

 

자료형[][] 배열명 = new 자료형[행][열];

int[][] number = new int [2][3];   // 2행 3열의 배열

number[0][0] | number[0][1] | number[0][2]

number[1][0] | number[1][1] | number[1][2]

- 2차원 배열에서 첫 번째 대괄호로 접근한 행들은 주소값이 되고, 두 번째 대괄호로 접근하는 열들이 값이 된다.

- arrData.length는 행을 나타내고, 열의 길이는 arrData[행의 index].length

- ex. arrData.length > 2 / arrData[0].length > 3

- 1차원 배열을 여러 개 선언할 때 관리하기 힘들기 때문에, 2차원 배열을 한 번에 선언한다.

- 하지만 2차원 배열은 메모리 낭비가 심하므로 선호하지 않는 편이다.

 

 

2차원 배열 선언

자료형[][] 배열 = {

{값1, 값2, 값3, ...},

{값1, 값2, 값3, ...},

.

.

.

};

int[][] arrData = {

{10, 20, 30},

{40, 50, 60}

};

- 각각 소배열들은 행을 나타내고, 그 안에 값들의 방 번호는 열을 나타낸다.

- 2차원 배열을 사용할 때에는 두 번 접근 해야하기 때문에 대괄호가 두 개이다.

 

 

2차원 배열 예제

- 2행 3열 배열 생성(초기화) 후 1행 3번째 값([0][2]) 출력 > 30

- for문으로 arrData에 있는 수 전체 출력. 총 6개이므로 6번 반복하도록 세팅.

  [i/3] > 0/3=0, 1/3=0, 2/3=0, 3/3=1, 4/3=1, 5/3=1 > 0 세 번, 1 세 번

  [i%3] > 0/3=0, 1/3=1, 2/3=2, 3/3=0, 4/3=1, 5/3=2 > 0, 1, 2 반복

  따라서 [0][0], [0][1], [0][2], [1][0], [1][1], [1][2] 배열의 모든 항목이 출력된다.

 


 

3. 중첩 for문

중첩 for문

for문 안에 for문이 있는 형태

바깥쪽에 있는 i for문은 다음 반복으로 넘어가기 위해서 안쪽 for문의 모든 문장을 마쳐야 한다.

안쪽의 j for문이 모두 완료되어야 바깥의 i for문 입장에서는 한 회 반복한 것이다.

1 회 반복시 i 값이 변하며 다음 반복으로 넘어가게 된다.

안쪽 for문의 반복횟수는 (i for문 반복횟수)

 

ex.

for(Int i=0; i<3; i++){

          반복할 문장

          for(int j=0; j<3; j++){

          반복할 문장

          }

바깥 for문 0일때 안쪽 0, 1, 2 반복

바깥 for문 1일때 안쪽 0, 1, 2 반복

바깥 for문 2일때 안쪽 0, 1, 2 반복

> 안쪽에 있는 for문은 총 3개(i)*3개(j) 총 9번 실행된다.

 

중첩 for문 예제

- i가 0일 때 j 0, 1, 2, 3, 4, i가 1일 때 j 0, 1, 2, 3, 4, 이런 식으로 i가 4가 될 때까지 반복되어 출력된다.

- 앞선 2차원 배열 예제처럼 배열 안 모든 수를 출력하는 예제를 중첩 for문을 이용할 수 있다.

  arrData.length는 arrData의 행의 인덱스 범위 > 0, 1

  arrData[i].length 는 arrData의 특정 행의 열의 인덱스 범위 > 0, 1, 2

 


 

배열 처음 들었을 땐 무슨 얘긴가 싶었는데 정리를 하다보니 이해가 되는 것 같기도 하공...

배열에 수를 넣는 방법을 다양하게 할 수 있는 것 같아서 공부를 좀 더 해봐야겠다.

728x90