이번 시간엔 많은 양의 데이터를 적은 코드로 처리하는 배열에 대해서 자세히 알아보도록 하겠습니다.
👩💻Why Use Array?
많은 양의 데이터를 다루는 프로그램의 예로 학생 30명의 성적을 저장하고 평균값을 구한다고 생각해봅시다.
int score1 = 83;
int score2 = 93;
...
int score29 = 100;
int score30 = 49;
이렇게 변수 30개를 만들어 준 뒤,
int sum = score1;
sum += score2;
sum += score3;
...
sum += score30;
int avg = sum / 30;
변수 전체를 더한 뒤 30으로 나눠 주는 과정을 거쳐야 합니다.
30명일 땐 할만하겠지만 100명이 되고, 1000명이 된다면 이것만큼 비효율적인 방법이 또 없을 것입니다.
그래서, 값들을 더 효율적으로 관리 하기 위해 배열을 사용합니다 !
👩💻What is Array?
배열은 데이터의 연속된 공간에 나열하고 각 데이터에 Index를 부여한 자료구조입니다.
같은 타입의 데이터만 저장할 수 있고,
한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다는 특징이 있습니다.
앞선 예제를 배열로 만들면 다음과 모양이 같습니다.

아까 평균 예제를 배열을 이용한다면
int sum = 0;
for(int i = 0; i<30; i++){
sum += score[i];
}
int avg = sum / 30;
이렇게 간단하게 만들 수 있습니다.
배열 변수 선언
배열을 담을 변수 선언은 대괄호를 사용해야 합니다.
대괄호의 위치는 아래와 같이 두 형태로 작성할 수 있습니다.
int[] intArray;
int intArray[];
double[] doubleArray;
double doubleArray[];
String[] strArray;
String strArray[];
만약 참조할 배열 객체가 없는 경우 배열 변수를 null값으로 초기화하는 방법입니다.
타입[] 변수 = null;
배열 생성
배열 생성은 값 목록으로 생성할 수 있습니다.
타입[] 변수 = { 값0, 값1, 값2, 값3, ...};
또 new 연산자를 이용해서 배열 생성할 수 있습니다.
int[] scores = new int[30];
🚨주의할 점🚨
타입[] 변수;
변수 = { 값0, 값1, 값2, 값3, ...} // 컴파일 에러(불가)
배열 변수 선언한 뒤에는 다른 실행문에서 값 목록으로 배열 생성 불가능합니다.
String names = null;
names = new String[] {"박현서","홍길동","까미"};
그래서 이렇게 배열 변수를 미리 선언한 후 값 목록이 나중에 결정되는 경우에는 new 연산자를 사용하여 값 목록을 지정합니다.
배열의 초기값
그렇다면 new 연산자로 배열을 새로 생성했을 때, 들어있는 초기값은 무엇일까요?

간단하게 기본타입 중 boolean을 제외하고 모두 0 이 들어가고
boolean은 false, 참조타입은 null이 들어가있다고 이해해도 좋을거같습니다.
배열의 길이
배열의 길이를 구하기 위해선 length 필드를 읽으면 됩니다.
int[] intArray = {10,20,30};
int num = intArray.length;
System.out.println(num)
// 결과값 : 3
이렇게 배열의 길이를 반환해 주는것을 알 수 있습니다.
여기서 하나 알아두면 좋은점이 있습니다.
length 필드는 읽기 전용이기에 수정할 수 없습니다.
intArray.length = 10; // 컴파일 오류 발생(잘못된 코드)
length를 쓸때 length()라고 썼던거 같은 기억이 있습니다.
하지만 강의에선 length를 써야한다고 해서 무엇이 맞는지 알아보았습니다.
length와 length()의 차이
찾아본 결과 length는 배열의 길이, length()는 문자열의 길이를 알고 싶을 때 쓴다는 것을 알게 되었습니다.
그렇다면 괄호가 붙은 length()와 붙지 않은 length로 구분을 해 놓은 것일까요?
이유는 length는 상수이고 length()는 메소드이기 때문입니다.
length는 배열이 선언될 때 최초의 길이를 저장하고 있습니다. 현재 배열에 저장한 요소 수가 아닌, 선언한 길이를 담고 있는 것입니다. 모든 배열은 해당 상수를 필드로 가지고 있습니다.
length()는 String에서 호출되면 해당하는 문자 수를 리턴합니다. 문자열은 열의 크기와 문자의 수가 동일합니다.
다차원 배열, 2차원 배열
2차원 배열은 대괄호가 2차례 연속해서 사용해서 생성합니다.
앞의 대괄호의 숫자가 행의 숫자, 뒤의 대괄호의 숫자가 열의 숫자가 됩니다.
int[][] scores = new int[2][3];

이런 형태로 2차원 배열이 만들어지게 됩니다.
그렇다면 실제로도 저렇게 만들어질까요?
아닙니다.
실제론 1차원 배열이 다시 1차원 배열을 참조하는 구조입니다.
다음 그림을 보면 이해가 더 빠르실 겁니다!

느낀점
배열에 대해서 다시한번 알아보면서 length와 length()의 차이점과 모든 배열의 길이(length)가 상수값으로 저장된다는 것을 새로 알게 되었습니다.
이런 몰랐던 사실을 하나하나 알아가며 기반을 단단하게 다져 놓으면, 언젠간 빛을 발하는 때가 올것이라고 굳게 믿고 있기에 앞으로도 기초를 탄탄하게 잡도록 노력해야겠습니다!
'🧮Programming > Java' 카테고리의 다른 글
| [Java] 패키지와 접근 제한자 (0) | 2024.02.06 |
|---|---|
| [Java] 객체와 클래스 (0) | 2024.02.06 |
| [Java] 참조 타입 (1) | 2024.02.04 |
| [Java] Java기초 문법 (0) | 2024.02.04 |
| [Java] Java의 개념적 원리 (0) | 2024.02.04 |