코린이의 소소한 공부노트

배열 (2) 초기화, 출력 본문

Java

배열 (2) 초기화, 출력

무지맘 2022. 1. 19. 19:46

배열은 생성하면 자동 초기화가 된다. 초기화 값은 배열 타입의 기본값이다. 예를 들어 int 타입 배열을 생성하면 int의 기본값인 0으로 초기화가 된다. 왜 자동 초기화를 시키는지 궁금할 것이다. 변수도 그렇고 배열도 초기화를 해야 사용 가능하다. 그렇지만 변수와는 다르게 배열은 값이 여러 개이기 때문에 자동 초기화가 되지 않는다면 우리가 하나하나 정성스럽게 초기화를 시켜주는 작업을 해야 한다. 이런 수고로움을 덜고자 배열 생성 시 해당 타입의 기본값으로 자동 초기화를 시켜놓고, 사용자가 원하는 대로 값을 저장하게끔 해놓았다.

배열에 값을 초기화(처음으로 값을 저장)하는 방법은 다음과 같다.

int[] arr = new int[6]; // 길이가 6인 int타입 배열 생성

// 1) 각 요소에 직접 저장
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
arr[5] = 6;

// 2) 저장할 값들이 규칙적이라면, 반복문으로 저장 가능
// 배열이름.length: 배열의 길이를 나타내는 상수
for ( int i=0 ; i<arr.length ; i++) // 여기서 arr.length = 6
	arr[i] = i+1;
    
// 3) 중괄호 { }를 이용하여 저장

// 3)-1 new 키워드 사용. 거의 안 씀
int[] arr = new int[] {1, 2, 3, 4, 5, 6};

// 3)-2 기본형처럼 사용. 가장 많이 씀
int[] arr = {1, 2, 3, 4, 5, 6};

// 3)-3 선언과 생성을 따로 함. 쓸까 말까 함
int[] arr;
arr = new int[] {1, 2, 3, 4, 5, 6};

// 3) 주의사항
int[] arr;
arr = {1, 2, 3, 4, 5, 6};
// 이런식으로 배열 선언하는 경우가 있기는 하나
// 지금의 예시에서는 이렇게 하면 에러 발생
// 3)-2를 애용하는 것이 좋음

 

배열에 값도 저장해봤으니, 배열을 출력해보는 것도 한번 해보자.

// 위에서 만든 arr 사용
// arr = {1, 2, 3, 4, 5, 6}

// 1) 배열 시작 주소 출력
System.out.println(arr); // [I@53bd815b

// 2) 반복문을 이용한 배열 값 모두 출력
for( int i=0 ; i<arr.length ; i++ )
	System.out.println("arr[" + i + "] = " + arr[i]);
// arr[0] = 1
// arr[1] = 2
// arr[2] = 3
// arr[3] = 4
// arr[4] = 5
// arr[5] = 6

// 3) 배열의 모든 요소를 String으로 출력
import java.util.Arrays; // ctirl+shift+o 자동 import 추가
// Arrays 클래스: 배열 조작 기능이 담겨있는 클래스
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5, 6]

 

다른 타입의 배열 출력도 위에 소개된 방식으로 사용하고, 결과도 비슷하다. 그런데 char 배열은 예외이다.

char[] arr2 = {'a', 'b', 'c', 'd', 'e'};

// 1) 배열 시작 주소 출력
System.out.println(arr2); // abcde
// ??

2) 반복문을 이용한 배열 값 모두 출력
for ( int i=0 ; i<arr2.length ; i++)
	System.out.println("arr2[" + i + "] = " + arr2[i]);
// arr2[0] = a
// arr2[1] = b
// arr2[2] = c
// arr2[3] = d
// arr2[4] = e

// 3) 배열의 모든 요소를 String으로 출력
System.out.println(Arrays.toString(arr2)); // [a, b, c, d, e]

char 배열은 배열 이름을 print문에 넣으면 저장되어있는 문자들이 출력된다. 주소를 얻고 싶다면 아래처럼 쓰면 된다.

System.out.println(arr2.toString()); // [C@53bd815b

[쿠키글1] 배열의 길이를 바꿀 수는 없을까?

배열을 생성해서 쓰다 보면 이미 배열의 길이만큼 꽉 채웠는데 값을 더 저장하고 싶을 때가 생긴다. 하지만 배열은 한번 생성하면 그 길이를 바꿀 수 없다. 배열은 연속된 저장공간이 할당되는데, 배열의 길이를 무작정 늘리려고 하면 연속적으로 추가돼야 하는 공간이 모자를 수 있기 때문이다.

그럼 부득이하게 늘려야 하는 경우에는 어떻게 해야 할까? 그때는 더 큰 배열을 생성한 후, 기존 배열의 값을 복사해 새로 만든 배열에 넣어야 한다......

 

[쿠키글2] toString() 메서드

toString 메서드는 객체가 가지고 있는 정보나 값들을 문자열로 출력해주는 메서드이다.

본문에 보면, 배열 이름을 출력했을 때 주소 값이 나오는 것을 확인할 수 있다. 이것은 뒤에 .toString()이 생략된 형태로, 이는 참조형 변수에 저장된 주소 값이 그대로 출력된 것이다.

그런데 char 배열의 배열 이름을 출력했을 때는 저장된 값이 그대로 나온 것을 확인할 수 있다. 이는 저장되어있는 값이 문자이기 때문에 주소가 아닌 값이 출력되는 것이다. 마치 변수 값을 출력하는 것처럼 말이다.

int i = 1;
System.out.println(i); // 1

 

그래서 char 배열의 주소를 알고 싶다면 toString 메서드를 이용해 저장된 값 외의 정보인 주소를 불러와야 한다. int배열과 char배열을 다시 한번 비교해보겠다.

int[] arr1 = {1,2,3,4,5,6};
char[] arr2 = {'a', 'b', 'c', 'd', 'e'};

System.out.println(arr1);		// [I@53bd815b
System.out.println(arr1.toString());	// [I@53bd815b
System.out.println(Arrays.toString(arr1)); // [1, 2, 3, 4, 5, 6]
System.out.println(arr2);		// abcde
System.out.println(arr2.toString());	// [C@2401f4c3
System.out.println(Arrays.toString(arr2)); // [a, b, c, d, e]

'Java' 카테고리의 다른 글

배열 (4) 2차원 배열  (0) 2022.01.24
배열 (3) 활용 예시  (0) 2022.01.20
배열 (1) 선언과 생성, 인덱스  (0) 2022.01.14
제어문 (2) 반복문 - while, do-while  (0) 2022.01.08
제어문 (2) 반복문 - for  (0) 2022.01.07