[이것이 자바다][Chapter 5] 참조타입

허다람·2025년 9월 12일
0

이것이 자바다

목록 보기
2/2
post-thumbnail

06 배열(Array)타입

변수는 하나의 값만 저장할 수 있다. 저장해야 할 값이 많아지면 그 만큼 많은 변수가 필요하기 때문에 배열을 사용하여 값을 저장해 준다.
변수를 사용하여 값을 저장하는 예를 들어보면

int score1 = 29;
int score2 = 40;
int score3 = 99;
...
int score30 = 78;

이런 식으로 학생 30명의 점수를 저장하기 위해 변수 30개를 선언해야 한다. 또한 평점 등을 구하기 위해 비효율 적으로 코딩을 해야한다.

int sum = score1;
sum += score2;
sum += score3;
...
sum += score30;
int avg = sum / 30;

따라서 많은 양을 다루는 효율적인 방법으로 배열을 사용한다.

배열이란?

연속된 공간에 값을 나열시키고, 각 값에 인덱스(index)를 부여해 놓은 자료구조이다.

인덱스란?

대괄호 [] 와 함께 사용하여 각 항복의 값을 읽거나 저장하는데 사용한다. 예를 들어 score라는 배열이 있다면 score[0]은 첫번째 값, score[1]는 두번째 값을 가진다.

for문을 활용하여 배열에 값 저장하기

int sum = 0;
for(int i = 0; i < 30; i++) {
	score[i] = i;
}
int avg = sum / 30;

for문이 30번 실행되면서 i의 값은 0 ~ 29까지 변한다. 따라서 score배열에는 0 ~ 29의 값이 할당된다.

배열의 특징

배열은 같은 타입의 값만 관리한다.
배열의 길이는 늘리거나 줄일 수 없다.

int 배열은 int 타입의 값만 관리하고, String 배열은 문자열만 관리한다. 배열은 생성과 동시에 길이가 결정된다. 또한 한 번 결정된 배열의 길이는 늘리거나 줄일 수 없다.

배열 변수 선언

배열을 사용하기 위해선 배열의 변수 선언을 해야한다. 배열 변수 선언은 두 가지 형태로 작성 할 수 있다.

타입[] 변수 ; 		타입 변수[];
// 관례적으로는 첫 번째 방법을 주로 사용한다. 

타입별로 배열을 선언하는 방법

int intArray;			int intArray[];
double[] doubleArray;	double doubleArray[];
String[] strArray;		String strArray[];

배열 변수는 참조변수이다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장한다. 참조할 배열이 없다면 배열 변수도 null로 초기화할 수 있다.
만약, 배열 변수가 null 값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NullPointerException이 발생한다.

값 목록으로 배열 생성

배열에 저장될 값의 목록이 있다면 간단하게 배열을 생성할 수 있다.

// 예시
타입[] 변수 = {0,1,2,3, ...};

문자열을 갖는 배열

String[] season = {"Spring", "Summer", "Fall", "Winter"};

중괄호 {}는 나열된 값들을 항목으로 가지는 배열을 힙에 생성하고, 번지를 리턴한다. 배열 변수는 리턴된 번지를 저장함으로써 참조가 이루어진다.
위와 같이 생성된 배열에서 "Spring"은 season[0], "Fall"은 season[2]로 읽을 수 있다. 만약 season[1]의 값을 "여름"으로 바꾸고 싶다면 대입 연산자를 사용하면 된다.

season[1] = "여름"

배열 변수 대입 주의할 점
중괄호 {}로 감싼 값의 목록을 배열 변수에 대입할 때 배열 변수를 미리 선언한 후에는 값 목록을 변수에 대입할 수 없다.

배열 변수를 선언한 시점과 값 목록이 대입되는 시점이 다르다면 다음과 같이 new 타입[]을 중괄호 앞에 붙여 주면 된다. 타입은 배열 변수를 선언할 때 사용한 타입과 동일하게 주면 된다.

변수 = new 타입[] {0,1,2, ... };

메소드 호출

메소드의 매개변수가 배열 타입일 경우에도 매개변수로 int[] 배열 타입을 갖는 pringItem() 메소드가 있다고 가정하면, printItem() 메소드를 호출할 때 매개값으로 중괄호를 감싼 값 목록을 주면 컴파일 에러가 발생한다.

// 메소드 선언
void printItem(int[] scores) { ... }

// 잘못된 메소드 호출
printItem( {98, 93, 90} ); // 컴파일 에러

올바른 메소드 호출

printItem( new int[] {98, 93, 90} );

new 연산자로 배열 생성

new 연산자를 사용하여 배열 객체를 생성시킨다. 길이는 배열이 저장할 수 있는 항목 수를 말한다. 값의 목록은 없지만 향후 값들을 저장할 목적으로 배열을 미리 생성할 때 사용한다.

타입[] 변수 = new 타입[길이];

new 연산자는 해당 길이의 배열을 생성하고 배열의 번지를 리턴하기 때문에 배열 변수에 대입할 수 있다. 이미 배열 변수가 선언된 후에도 다음과 같이 대입이 가능하다.

타입[] 변수 = null;
변수 = new 타입[길이];

길이 5인 int[] 배열을 생성하고, 배열 번지를 intArray 변수에 대입한 예제

int[] intArray = new int[5];

new 연산자로 배열을 처음 생성하면 배열 항목은 기본값으로 초기화된다.
타입 별 배열의 초기값
byte[] : 0
char[] : '\u0000'
short[] : 0
int[] : 0
long[] : 0L
float[] : 0.0F
double[] : 0.0
boolean[] : false
클래스[] : null
인터페이스[] : null

배열을 int와 String으로 생성했다면 각각 0과 null로 초기화된다.

int[] score = new int[30];
String[] names = new String[30];

배열 길이

배열에 저장할 수 있는 항목의 수를 말한다. 코드에서 배열의 길이를 얻으려면 도트(,) 연산자를 사용해서 참조하는 배열의 length 필드를 읽으면 된다.
배열의 length 필드는 읽기만 가능하므로 값을 변경할 수는 없다.

배열변수.length;

이것이 자바다 책을 공부하며 작성한 글입니다.

profile
나 java봐라

0개의 댓글