Java - 기본기

9. 배열 다루기 기초편 (1) : 배열의 생성, 선언, 인덱스

TerianP 2021. 10. 8.
728x90

1. 배열이란?

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 즉 int 형 10개의 변수를 하나의 묶음으로 다루거나 String 형 10개의 변수를 하나의 묶음으로 다루는 것이 가능
int[] score = new int[5]; // int 값 5 개를 저장 할 수 있는 score 배열 생성

!!! 배열에는 자동으로 인덱스 == 저장 공간이 만들어짐. 이때 인덱스 번호는 1이 아닌 0부터 시작!

 

2. 배열의 생성과 선언

  • 배열의 선언 - 배열을 다루기 위해 참조 변수의 선언 ⇒ 선언 방법은 아래 2가지
// 1. 배열 선언
타입[] 변수이름; // 이쪽을 보통 더 선호
타입 변수이름[];

// 2. 배열 선언+길이 지정
int[] score; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int[5]; // int 타입의 값 5개를 저장 할 수 있는 배열 생성
// 이때 인덱스는 0부터 시작하기에,0 1 2 3 4 까지가 인덱스의 번호가 됨

 

3. 배열의 인덱스

  • 배열의 인데스 - 배열의 저장공간에 자동으로 붙는 번호 ⇒ 0부터 시작!!!!!!
  • 예를 들어 길이가 10인 int 배열이 있다면, 시작하는 인덱스 범위는 0 ~ 9
int[] score = new int[5]; // 길이가 5인 score 배열
score[3] = 100; // 배열의 3번 인덱스(4번째)에 100 값 저장
int value = score[3]; // value 변수에 score 배열의 3번 인덱스(4번째) 값 저장

 

4. 배열의 기초 : 참조변수 선언, 배열 생성

static void array_1() {
		//int[] result; // 배열 result(참조변수) 선언
		//result = new int[5]; // 배열 생성(int 저장공간 x 5)
		// 위 2줄을 합쳐서
		int[] result = new int[5];
		
		result[1] = 100;
		System.out.println(result[1]);
		
		int value = result[1];
		System.out.println("value = "+value);
	}

 

 

5. 배열의 길이

  • 배열 길이 : 배열이름.length 사용(int형 상수)
  • 배열의 길이는 int 형 상수이기 때문에 한번 생성하면 그 길이를 바꿀 수 없음
int[] arr = new int[5]; // 길이가 5인 int 배열
int tmp = arr.length; // arr.length 의 값은 5이고 tmp에 5가 저장된다

 

근데 여기까지만 보았을 때 다음과 같은 2가지 의문사항이 생긴다.

 

1) 만약 내가 생성한 배열의 크기를 왜 못 바꿀까? && 내가 생성한 배열의 크기가 부족한 경우 어떻게 할까?

  • 예를 들어 int 형 5개의 배열인 경우 메모리에 연속적인 20byte(4byte X 5)의 공간이 가 필요하다. 그런데 이때 내가 추가로 공간을 늘리려고 하면 먼저 생성한 20byte 메모리 값 뒤에 새로 배열의 값을 넣을 수 있는 연속적인 공간이 공간이 있어야 한다. 그러나 우리는 바로 뒤에 연속적인 메모리 공간이 있다고 확신할 수 없다. 이러한 메모리 크기 문제 때문에 쉽게 배열의 크기를 바꿀 수 없고, 배열의 크기가 부족해서 더 추가하려고 할 경우에는 새로 배열을 생성해야 한다.

2) 여기서 한 가지 더!! 그러면 내가 배열의 전체 크기를 알 수 없는 상태에서 배열을 생성할 수 있을까?

  • 예를 들어 특정한 숫자(n)를 입력받고 그 입력받은 숫자까지를 배열에 넣으려고 하면(1~n 까지 배열에 넣기) 나는 배열의 전체 크기를 모른채 배열을 생성해야 한다. 아래처럼 물론 배열의 크기를 n 으로 주고 배열을 생성하면 되지만 ArrayList 라는 클래스를 사용하여 가변적인 크기의 배열을 생성하면 보다 쉽게 생성이 가능하다.
Scanner scan = new Scanner(System.in);
int num = scan.nextInt(); // num 값을 입력받음

// 기본적인 배열 생성 : 기본적으로는 이번 방법 이지만,		
		int[] array = new int[num];

			for(int i=0; i<array.length; i++){ // 배열 이름.length 사용
			array[i]=i+1;
			System.out.println(i+"번째 값 = "+array[i]);
		}

// ArrayList 사용 : 요렇게 사용하는 방법도 있따!
ArrayList<Integer> array_2 = new ArrayList<Integer>(); // 따로 배열 크기 입력X
		for(int i=0; i<num; i++) {
			array_2.add(i, i+1);	// i 번째 방에 i+1 값 저장
		}
		
		for(Integer j : array_2) {
			System.out.println(j+"번째 값 = "+j);
		}

※ 다만 ArrayList 는 내용이 뭐가 엄청 많아서...나중에 다루도록 하겠다.

 

6. 배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
  • 변수의 초기화와 사실상 동일
int[] score = new int[] {50,60,70,80,90}; // 
int[] score = {50,60,70,80,90}; // new int[] 생략 가능

 

 

7. 배열의 출력

  • int[] iArr = {100, 90, 80, 70, 60}
  • 이때 단순히 iArr 을 출력했을 때 [I@14318bb] 와 같은 형식의 주소값이 출력된다. 이때 @ 앞의 I 는 Integer , @ 뒤는 iArr 배열의 주소값을 의미한다.
  • 예외적으로 char 배열의 경우 그대로 배열 안의 값이 출력된다.
  • 기본적으로 배열 요소를 출력하기 위해서는 for문 혹은 Arrays 클래스를 사용한다.
// for 문 사용
int[] iArr = {100, 90, 80, 70, 60}
		
		for(int i=0; i<array.length; i++){
			System.out.println("iArr["+i+"] = "+iArr[i]);
		}

// Arrays 클래스 사용
System.out.println(Arrays.toString(iArr)); // 이때 값은 String 으로 변환되어 출력됨

 

댓글