부트캠프

Java 배열

hunm719 2022. 12. 26. 23:56

배열 : 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미

값들이 같은 의미를 지니면서 서로 연관성이 있을 때, 이들을 하나의 덩어리로 묶을 수 있으며, 이렇게 묶여진 값들의 집합

 

예시) 7월 한 달 동안 일별 최고기온을 저장

변수 값 저장

 

각 변수는 개별적으로 선언된 변수이므로 메모리 공간 상에 흩어져서 개별적으로 존재하게 됨.

 

하지만 배열을 사용하여 값을 저장하는 경우, 아래와 같이 메모리 공간 상에 연속적으로 값들이 모여서 저장됨.

배열 생성 후 저장

배열을 통해 값들을 묶어서 저장한다는 것은 메모리 공간 상에 물리적으로 값들을 모아서 저장하는 것을 의미함.

*요소(element) : 배열이 가진 각각의 값들

*인덱스(index) : 배열의 각 요소가 부여받는 순번

 

-배열과 관련하여 언급되는 ‘차원’이라는 것은 배열이 중첩된 정도를 의미로, 배열의 요소가 또 다른 배열인 경우임.

  • 1차원 배열 : 배열이 중첩이 없는 경우 = 배열의 요소가 배열이 아닌 경우
    • 예 : { 1, 2, 3, 4 }
  • 2차원 배열 : 배열이 한 번 중첩된 경우 = 배열의 요소가 배열인 경우
    • 예 : { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }

<1차원 배열의 선언과 초기화>

1차원 배열을 선언할 때에는 다음과 같이 타입 뒤에 대괄호를 붙여서 선언하고 초기화함.

 

double[] temperatureOfJuly;
temperatureOfJuly = new double[31];

 

1.double[] temperatureOfJuly; -> 배열을 가리킬 참조 변수 temperatureOfJuly를 선언
2.new double[31]; -> 총 31개의 double형 값을 저장할 수 있는 배열이 생성되고, 모든 요소는 double형의 기본값인 0.0으로 초기화

3.temperatureOfJuly = new double[31]; -> 대입 연산자(=)에 의해 생성된 배열 첫 번째 요소의 주소값이 참조 변수 temperatureOfJuly에 할당

 

+temperatureOfJuly 가 참조 변수인 이유

  • 기본 타입의 값을 변수에 할당하면 해당 변수에는 실제 값이 저장
  • 참조 타입의 값을 변수에 할당하면 해당 변수에는 주소값이 저장

int형, double형과 같은 기본 타입의 경우, 기본 타입의 값을 저장할 변수를 선언하는 시점에 얼마 만큼의 메모리 공간을 확보해야 하는지 컴퓨터가 알 수 있음.

하지만 참조 타입의 경우, double[] temperatureOfJuly;와 같이 배열을 선언하는 시점에 배열이 몇개의 요소를 가질지 컴퓨터는 알 수 없음. 따라서 배열을 선언하면, 이후에 생성될 배열의 주소값을 담을 메모리 공간만이 확보되고, 이후 배열이 생성되고 난 다음에 해당 배열의 시작 주소값이 참조 변수에 할당됨.

 

 

+ 선언과 초기화를 하나의 문장으로 할 때에 한해 new double[]을 생략할 수 있음.

double[] temperatureOfJuly = { 27.4, 30.1, 31.1, 32.4, ..., 31.8 };

 

+ 값 접근하기 : 배열_참조_변수_이름[인덱스]로 배열의 요소에 접근. 첫 번째 요소는 인덱스가 0임.

+ 배열의 길이 : 배열이 가진 요소의 개수를 의미하며, 배열_참조_변수_이름.length으로 얻을 수 있음

                          배열의 길이 - 1이 배열 마지막 요소의 인덱스임.

 

<2차원 배열>

2차원 배열은 배열의 각 요소가 또 다른 배열인 구조

 

int[][] kcal = new int[31][3];

위의 예제코드는 실행되면, 내부 배열은 3개의 0을 요소로 가지지만, 외부 배열의 각 요소는 내부 배열의 주소값을 저장함.

 

 

+ 가변 배열 : 배열이 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되는 경우

 

int[][] ages = new int[5][];

위의 예제처럼 외부 배열은 크기를 5으로 지정했으나, 내부 배열에는 크기를 지정하지 않은 경우를 가변 배열이라 함.

내부 배열을 생성하려면 new int[]를 사용하여 외부 배열의 각 요소에 할당해주어야 함.

 

 

<배열 탐색>

 

반복문을 통한 배열 탐색

int[] scores = { 100, 90, 85, 95, 100 };

 

1.일반적인 for문으로 배열을 순회하여 총합을 구하는 경우

int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;

for (int i = 0; i < scores.length; i++) {
	sum += scores[i];
}
System.out.println(sum); // 470

 

2.while문을 통해 배열을 순회하여 총합을 구하는 경우

int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;
int i = 0;

while (i < scores.length) {
	sum += scores[i++];
}
System.out.println(sum); // 470

 

3.Enhanced for문을 통해 배열을 순회하여 총합을 구하는 경우

 *향상된 for문으로 배열을 순회하면서 배열의 값을 수정할 수 없음

int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;

for (int score: scores) {
	sum += score;
}
System.out.println(sum); // 470

 

기본적으로 인덱스와 배열의 크기(length)를 활용하여 탐색한다는 점에서 문자열 탐색과 유사함.

 

 

이미지 및 내용 출처 - code states

'부트캠프' 카테고리의 다른 글

Java 객체지향 프로그래밍 기초 2  (0) 2022.12.28
Java 객체지향 프로그래밍 기초  (1) 2022.12.27
Java 조건문 - 반복문  (1) 2022.12.23
Java 연산자 및 조건문  (1) 2022.12.22
Java 기초  (1) 2022.12.21