배열 : 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미
값들이 같은 의미를 지니면서 서로 연관성이 있을 때, 이들을 하나의 덩어리로 묶을 수 있으며, 이렇게 묶여진 값들의 집합
예시) 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 |