19~20일차 java - 배열(책 내용 정리)

jin·2022년 5월 15일
0

배열(array)

1. 배열의 개념

타입이 같은 많은 데이터를 다룰 때 모든 데이터에 변수를 각각 지정한다면 개수가 너무 많아 복잡해진다. 이럴 때 배열array이라는 데이터 구조를 이용하면 동일한 데이터 타입의 집합을 쉽게 처리할 수 있다.
예를 들어 5과목 점수를 일반 타입과 배열 타입으로 비교해보자.
배열을 사용하지 않는다면 5개의 변수가 필요하지만, 배열을 사용한다면 단 하나의 참조 변수면 충분하다. 배열은 타입이 동일한 여러 데이터의 연속된 기억 공간으로, 모든 데이터가 같은 배열 이름을 사용한다.

// 기본 타입 값들 저장
int score1 = 100;
int score2 = 90;
int score3 = 50;
int score4 = 95;
int score5 = 85;
// 배열로 기본타입 값들 저장
int[] scores = { 100, 90, 50, 95, 85 };

이와 같이 배열을 사용하면 같은 데이터 타입에 대한 값들을 훨씬 더 깔끔하게 입력할 수 있다.

2. 배열의 선언과 생성

배열은 동일한 데이터 타입으로 구성된 컨테이너 객체이다. 이때, 데이터의 개수는 고정되어 있어야 한다. 배열을 사용하려면 배열을 참조할 변수를 선언하고, 배열 객체를 생성해야 한다. 예를 들어 졍수 타입 배열을 참조할 scores 변수는 다음과 같이 선언한다.

int[] scores;
// or
int scores[];

배열 크기는 배열이 생성될 때 정해지며, length 필드에 저장한다. 배열을 참조할 변수를 선언할 때는 배열 크기를 지정할 수 없으므로 다음은 잘못된 것이다.

int scores[5];

scores는 배열을 참조할 변수에 불과하므로 배열 객체를 생성해야 한다. 배열 객체는 문자열처럼 new 연산자로 생성한다. 객체를 생성하지 않고 사용할 경우 멤버 변수라면 null이 되지만 지역 변수라면 오류가 발생한다. scores가 5개의 정수 타입 원소로 구성된 배열을 참조하는 방법을 알아보자. 아래 코드는 선언과 동시에 참조하는 방법이다.

int scores[] = new int[5]; // new int[5]는 배열 크기를 뜻한다.

배열 변수를 먼저 선언한 후 배열을 초기화할 때는 반드시 new 연산자로 객체를 생성해야 한다. 예를 들어 5개의 정수 타입 원소로 구성된 scores 배열은 방법 1~3으로 초기화 할 수는 있지만, 4로는 초기화할 수 없다.

// 방법 1
int[] scores = { 100, 90, 50, 95, 85 };
// 방법 2
int [] scores = new int[] { 100, 90, 50, 95, 85 };
// 방법 3
int[] scores;
scores = new int[] { 100, 90, 50, 95, 85 };
/* 방법 4 - 이 방법은 배열 크기 할당을 안하고 초기화 했기 때문에 불가능함.
int[] scores;
socres = { 100, 90, 50, 95, 85 };
*/

3. 배열 원소의 접근과 배열의 크기

배열은 모든 데이터가 같은 배열 이름을 사용하므로 인덱스로 접근할 수 있다. 인덱스 값은 0부터 시작해 양의 정수만 가능하다. 따라서 마지막 인덱스는 배열 크기보다 하나 작은 정수가 된다. 개별 원소에 접근할 때는 다음과 같이 배열 이름 옆에 인덱스를 포함한 대괄호[]를 사용한다. 그러므로 scores가 가리키는 원소는 scores[0], scores[1] 등의 방식으로 접근할 수 있다.
배열이름[인덱스];
배열이 생성될 때 배열 크기가 결정되며, length 필드를 보면 크기를 알 수 있다. 따라서 scores가 가리키는 배열 크기는 scores.lengt에 있다.

인용 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

덤. 포스팅 기준은 강의 기본이론 - 알고리즘 - 심화 챕터 진행 후 다음 기본이론이 나올 때 작성하고 있다. 이번에 강의 내용과 인상에 남던 문제들을 같이 정리하다보니 강의-배열 포스트가 길어진데다가 책에서 배열 다루는 양도 상당해서 따로 작성하기로 했다.

0개의 댓글