본문 바로가기
✏️Java 공부/Java의 정석

[Java 공부/ Java의 정석] Chapter 05. 배열

by 코코의 주인 2022. 1. 23.

배열

배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

을 말한다. 즉, 연관이 있는 같은 타입의 변수를 여러 개 쓰기 귀찮으니 배열로 묶어서 한 번에 관리하겠다는 뜻이다.

int score1, score2, score3, score4, score5;  //귀찮음

int[] score = new int[5] //score[0~4]까지 5개 생성

배열을 사용하면 위와 같이, 같은 타입의 변수를 간단하게 나타낼 수 있다.

 

배열의 선언과 생성

타입[] 변수 이름;  //배열 선언
변수 이름 = new 타입[길이];  //배열 생성

타입[] 변수 이름 = new 타입[길이];  //배열의 선언과 생성을 한번에

//예시
int[] score = new int[5]

자바에서 배열을 선언하고 생성하는 것은 C++에서 동적 할당하는 문법과 비슷하다.

그렇다고 자바에서 저 문법을 통해서 배열을 동적 할당할 수 있다는 것은 아니다.

배열이 생성될 때 각 요소의 값은 '0'으로 초기화된다.

 

배열의 초기화

int[] score = new int [5];
score[0] = 1;
score[1] = 2;
score[2] = 3;
score[3] = 4;
score[4] = 5;

배열은 선언과 생성 후에 초기화를 해주는 방법이 있다.

여기서 초기화는 reset이 아니라 초기 값을 설정해 준다는 뜻이다.

int[] score = new int[] {1, 2, 3, 4, 5};
int[] score = {1, 2, 3, 4, 5}  //new int[] 생략 가능

생성과 동시에 초기화를 해주는 방법도 존재한다.

score[0] = 1 score[1] = 2 score[2]  = 3 score[3] = 4 score[4] =5

초기화가 완료된 배열은 위와 같이 나타내어진다.

 

배열의 길이

입력받은 수만큼 반복문을 돌린다던가 할 때 배열의 길이가 궁금할 때가 있다.

그때 배열이름.length를 사용하면 배열의 길이를 알 수 있다.

int[] arr = new int[5];  //길이가 5인 배열 선언 및 생성
int len = arr.length;  //len = 5

 

배열의 출력

for문 사용

int arr[] = new int[] {0, 1, 2, 3, 4};

for(int i = 0; i < arr.length; i++) {
	System.out.printf("%d ", arr[i]);  //출력 : 0 1 2 3 4
}

배열을 출력하기 위해서는 반복문을 사용하여 배열의 처음부터 끝까지 출력하는 방법이 일반적이다.

 

Arrays.toString() 사용

int arr[] = new int[] {0, 1, 2, 3, 4};
System.out.println(arrys.toString(arr));  //출력 : [0, 1, 2, 3, 4]

하지만 Arrays.toString(배열이름)을 활용하면 더 간단하게  출력할 수 있다.

이 경우 배열의 요소들을 문자열로 만들어서 반환한다.

 

배열의 복사

for문 사용

int arr1[] = new int[] {0, 1, 2, 3, 4};
int arr2[] = new int[5];

for(int i = 0; i < arr1.length; i++) {
	arr2[i] = arr1[i];
}
System.out.println(Arrays.toString(arr1));  //출력 : [0, 1, 2, 3, 4]
System.out.println(Arrays.toString(arr2));  //출력 : [0, 1, 2, 3, 4]

배열의 복사 역시 for문을 통해서 하는 것이 일반적이다.

하지만 이 경우 배열의 요소 하나하나에 접근해서 복사하기 때문에 배열의 크기가 커지면 시간이 오래 걸린다는 단점이 있다.

System.arraycopy() 사용

int arr1[] = new int[] {0, 1, 2, 3, 4};
int arr2[] = new int[5];

//System.arraycopy("복사하는 배열", "복사 시작 인덱스", "붙여넣는 배열", "붙여넣기 시작 인덱스", "복사하려는 데이터 수")
System.arraycopy(arr1, 0, arr2, 0, arr1.length)  

System.out.println(Arrays.toString(arr1));  //출력 : [0, 1, 2, 3, 4]
System.out.println(Arrays.toString(arr2));  //출력 : [0, 1, 2, 3, 4]

String 배열

String 배열은 문자열을 담는 배열이다. 각각의 요소에 문자열을 하나씩 담을 수 있다.

String 배열의 초기화

String[] name = new String[3];
name[0] = "Java"
name[1] = "C++"
name[2] = "Python"

배열은 선언과 생성 후에 초기화 해주는 방법은 위와 같다.

String[] name = new String[] {"Java", "C++", "Python"};

String[] name = {"Java", "C++", "Python"}	// new String[] 생략 가능

생성과 동시에 초기화를 해주는 방법도 존재한다.

name[0] = "Java" name[1] = "C++" name[2] = "Python"

초기화가 끝난 배열은 위와 같이 생성된다.


다차원 배열

코딩을 하다 보면 다차원 배열을 사용할 일이 생긴다.

예를 들어, 그래프를 나타낼 때 노드와 간선을 2차원 배열로 표현하면 쉽게 나타낼 수 있다.

3차원, 4차원 배열도 생성이 가능하지면 쓸 일이 거의 없기 때문에 2차원 배열만 잘 알고 있으면 된다.

따라서 이 글의 모든 설명은 2차원 배열을 가정하고 하겠다.

 

2차원 배열의 선언과 생성

int[][] score = new int[3][3];
int[] score[] = new int[3][3];
int score[][] = new int[3][3];

위의 세 가지 문법을 통해 2차원 배열을 선언하고 생성할 수 있다.

int 타입의 2차원 배열을 score란 이름으로 선언하고 3X3의 크기로 생성한 것이다.

score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[2][0] score[2][1] score[2][2]

이 배열에 접근하기 위한 인덱스는 위의 표와 같다.

score[0][0] = 1;  //score 배열의 1행 1열에 1을 저장
System.out.printlf(score[0][0]); //score배열의 1행 1열 값을 출력

 

2차원 배열의 초기화

int[][] score = new int[][] { {1,2,3}, {4,5,6}, {7,8,9} };
int[][] arr = { {1,2,3}, {4,5,6}, {7,8,9} };  //new int[][] 생략 가능

위의 방법으로 2차원 배열을 초기화하면 아래의 표와 같이 만들어진다.

score[0][0] = 1 score[0][1] = 2 score[0][2] = 3
score[1][0] = 4 score[1][1] = 5 score[1][2] = 6
score[2][0] = 7 score[2][1] = 8 score[2][2] = 9

 


총평

지금까지 자바의 배열에 대해 알아봤다.

C++이랑 큰 차이는 없어서 간단하게 정리만 해봤다.

다음 글부터는 객체지향 프로그래밍에 대해 공부해볼 예정이다.

댓글