본문 바로가기

언어 기초/JAVA

[자바의정석 | Chapter 05 배열] 배열 예제1,2

1. 학습목표

배열을 이해할 수 있다.

책에 있는 배열파트 예제는 모두 다루어보겠다.

2.필요 개념 문장정리

배열(array)

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라고 한다.
  • 중요한것은 같은 타입이어야 한다는 것이며 서로 다른 타입의 변수들로 구성된 배열은 만들수 없다.
  • 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 []를 붙이면 된다.
  • 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다. 배열을 생성하기 위해서는 연산자 new와 함께 배열의 타입과 길이를 지정해 주어야 한다.
    타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 동시에 생성
  • 생성된 배열의 각 저장공간을 배열의 요소라고 하며 배열이름[인덱스]의 형식으로 배열의 요소에 접근한다. 인덱스는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 인덱스는 1이 아닌 0부터 시작한다.
  • 배열에 값을 저장하고 읽어오는 방법은 변수와 같다. 단지 변수이름 대신 배열이름[인덱스]를 사용한다.
  • index로 상수 대신 변수나 수식도 사용할 수 있다.
  • 주의할 점은 인덱스의 범위를 벗어난 값을 인덱스로 사용하지 않아야 한다는 것이다.
  • 배열의 길이는 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수다. 배열의 길이가 0일 수 도 있다.
  •  배열이름.length를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. 
    int[] arr = new int[5]; 길이가 5인 int배열
    int tmp = arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.
  •  배열이름.length는 상수다. 즉, 값을 읽을 수만 있을 뿐 변경할 수 없다.
  • for문의 조건식에 배열의 길이를 직접 적어주는 것보다 배열이름.length를 사용하는 것이 좋다.
  • 배열의 길이를 변경할 때에는 더 큰 길이의 새로운 배열을 생성한 다음 기존의 배열에 저장된 값들을 새로운 배열에 복사하면 된다.
  • Arrays.toString(배열이름)메서드를 사용하면 배열의 모든 요소를 문자열로 만들어서 반환한다.
    int[] iArr = { 100, 95, 80, 70, 60 };
    System.out.println(Arrays.toSting(iArr)); // 배열 iArr의 모든요소를 출력한다.
  • iArr은 참조변수이기 때문에 변수에 저장된 값인 배열의 주소 타입@주소 형식이 출력된다.

 3. 코드작성

배열의 범위

class ArrayEX1 {
	public static void main(String[] args) {
    	int[] score = new int[5];
        int k = 1;
        
        score[0] = 50;
        score[1] = 60;
        score[k+1] = 70;
        score[3] = 80;
        score[4] = 90;
        
        int tmp = score[k+2] + score[4];
        
        for(int i=0; i < 5; i++) {
        	iArr1[i] = i + 1;
        }
        
        for(int i=0; i < iArr2.length; i++) {
        	System.out.printf("score[%d] : %d%n", i, score[i]);
        }
    	
        System.out.printf("tmp : %d%n", tmp);
    	System.out.printf("score[%d] : %d%n", 7, score[7]); //인덱스의 범위를 벗어남
    }       
}

 

배열의 초기화와 출력

import java.util.*;

class ArrayEX2 {
	public static void main(String[] args) {
    	int[] iArr1 = new int[10];
        int[] iArr2 = new int[10];
        int[] iArr3 = new int[] {100, 95, 80, 70, 60};
        int[] iArr3 = {100, 95, 80, 70, 60};
        char[] chArr = {'a', 'b', 'c', 'd'};
        
        for(int i=0; i < iArr1.length; i++) {
        	iArr1[i] = i + 1;
        }
        
        for(int i=0; i < iArr2.length; i++) {
        	iArr2[i] = (int)(Math.random()*10) + 1;    	
        }
    
    	System.out.println();
        System.out.println(Arrays.toString(iArr2));
        System.out.println(Arrays.toString(iArr3));
        System.out.println(Arrays.toString(chArr));
        System.out.println(iArr3); //배열을 출력하면 배열의 해시코드가 출력됨
        System.out.println(chArr);
    }       
}

실행결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 2, 8, 7, 8, 5, 1, 8, 9, 5]
[100, 95, 80, 70, 60]
[a, b, c, d]
[I@7ef20235  --실행할때마다 달라질 수 있다.
[a, b, c, d]

 

4. 마무리

배열의 초기화와 출력에 대해 이해할 수 있었다.

배열자체를 출력하면 값이 아닌 주소가 출력된다.