본문 바로가기
[즐거운 자바 강좌] 정리

[즐거운 자바 강좌] 섹션 5 - 배열(Array)

by haeyoon 2024. 3. 31.

배열을 사용하는 경우?

같은 타입의 변수가 여러개 필요할 때

 

1. 기본형 배열

기본형 (boolean, byte, short, char, int, long, float, double) 타입의 배열

 

 1) 배열 선언하기

기본형타입[] 변수명;
기본형타입 변수형[];

 

[예제1]

public class Array01 {
    public static void main(String[] args) {
        //배열 객체를 참조. null값을 가지게 됨
        int[] array1;
        int array2[];
        int array3[];

        //초기화
        array1 = new int[5]; //정수를 5개 가질 수 있는 배열로 초기화
        array2 = new int[5];
        array3 = new int[0]; //정수를 가질 수 없는 배열로 초기화

        System.out.println(array1.length);
        System.out.println(array2.length);
        System.out.println(array3.length);
    }
}

   + 초기화 과정 없으면 에러 발생

→ 출력:

[예제2]

public class Array02 {
    public static void main(String[] args) {
        int[] array1, array2;
        int array3[], array4;
    }
}

array1, array2는 모두 배열

array3도 배열 / array4는 배열X

 

 2) 배열 초깃값이 있이 선언하기

기본형 타입[] 변수명 = new 기본형타입[배열크기];
변수형[index값] = 값;

기본형타입[] 변수명 = new 기본형타입[]{값1, 값2, ...};

기본형타입[] 변수명 = {값1, 값2, ...}

[예제]

public class Array03 {
    public static void main(String[] args) {
        int[] array1 = new int[5];
        array1[0] = 1;
        array1[1] = 2;
        array1[2] = 3;
        array1[3] = 4;
        array1[4] = 5;
        int[] array2 = new int[]{1,2,3,4,5};
        int[] array3 = {1,2,3,4,5};

        System.out.println("array1의 값 출력");
        for (int i=0; i<5; i++)
            System.out.println(array1[i]);

        System.out.println("array2의 값 출력");
        for (int i=0; i<5; i++)
            System.out.println(array2[i]);

        System.out.println("array3의 값 출력");
        for (int i=0; i<5; i++)
            System.out.println(array3[i]);
    }
}

 


2. 참조형 배열

배열이 가지는 값이 참조형인 배열

(배열 변수가 참조하는 배열의 공간이 값을 저장하는 것이 아니라 값을 참조하는 것)

 

[예제1]

public class ItemForArray {
    private int price;
    private String name;

    public ItemForArray(int price, String name) { //불변클래스: 생성할때 값을 넣어주고 값 바꿀수X
        this.price = price;
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public String getName() {
        return name;
    }
}
public class Array04 {
    public static void main(String[] args) {
        ItemForArray[] array1;
        ItemForArray array2[];

        array1 = new ItemForArray[5];
        array2 = new ItemForArray[5];

        array1[0] = new ItemForArray(500, "item01"); //해당 인스턴스를 참조
        array1[1] = new ItemForArray(1000, "item02");
        ItemForArray i1 = new ItemForArray(500, "itemAAA");

        System.out.println(array1[0].getName());
        System.out.println(i1.getName());
    }
}

출력:

 

[예제2]

public class Array05 {
    public static void main(String[] args) {
        ItemForArray[] array1 = new ItemForArray[3];
        array1[0]= new ItemForArray(500, "사과");
        array1[1]= new ItemForArray(300, "바나나");
        array1[2]= new ItemForArray(900, "수박");

        ItemForArray[] array2 = new ItemForArray[]{new ItemForArray(500, "사과"),
                new ItemForArray(300, "바나나"),
                new ItemForArray(900, "수박")};
        ItemForArray[] array3 = {new ItemForArray(500, "사과"),
                new ItemForArray(300, "바나나"),
                new ItemForArray(900, "수박")};

        System.out.println(array1[0].getName());
        System.out.println(array1[0].getPrice());
        System.out.println(array1[1].getName());
        System.out.println(array1[1].getPrice());
        System.out.println(array1[2].getName());
        System.out.println(array1[2].getPrice());
    }
}

출력:

 

[발생 오류]

- NullPointException

double[] array1 = new double[5];
double[] array2 = {1.5, 2.4, 3.5};
double[] array3 = null;

System.out.println(array1.length);
System.out.println(array2.length);
System.out.println(array3.length);  //에러 발생

null값으로 초기화 되거나 초기화 되지 않은 배열의 길이를 출력할 때 발생

 

- ArrayIndexOutOfBoundsException

double[] array = {1.5, 2.4, 3.5};

System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]); //에러 발생

배열의 길이 범위 외의 인덱스를 출력할 때 발생

 


3. 이차원 배열

  배열이 또다른 배열을 가르킴

타입[][] 변수명 = new 타입[행의수][열의수];
변수명[행인덱스][열인덱스] = 값;

[예제]

[코드]

public class Array08 {
    public static void main(String[] args) {
        int[][] array = new int[2][3];
        array[0][0] = 0;
        array[0][1] = 1;
        array[0][2] = 2;

        array[1][0] = 3;
        array[1][1] = 4;
        array[1][2] = 5;

        for (int i = 0 ; i < array.length ; i++){
            for (int j = 0; j < array.length ; j++) {
                System.out.println(array[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

출력:

 

- 이차원 가변 배열의 선언과 초기화

 · 선언

타입[][] 변수명 = new 타입[행의수][];
변수명[행의인덱스] = new 타입[열의수];
int[][] koreanScoreArray = new int[3][];
koreanScoreArray[0] = new int[20];
koreanScoreArray[1] = new int[19];
koreanScoreArray[2] = new int[21];

 

가변 배열의 출력

for (int i = 0 ; i < array.length ; i++){
            for (int j = 0; j < array[i].length ; j++) {
                System.out.println(array[i][j] + "\t");
            }
            System.out.println();
        }

 

 · 초기화

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

4. for each 문

 - 배열값들을 쉽게 출력할 수 있게 도와준다.

for (타입 변수명 : 배열명){
	...
}
public class Array12 {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};

        for (int i : array){
            System.out.println(i);
        }
    }
}

   i를 array 배열에서 없어질때까지 꺼낸다

[예제]

public class Array13 {
    public static void main(String[] args) {
        ItemForArray[] array = new ItemForArray[3];
        array[0]= new ItemForArray(500, "사과");
        array[1]= new ItemForArray(300, "바나나");
        array[2]= new ItemForArray(900, "수박");

        for (ItemForArray item : array){
            System.out.println(item.getName());
            System.out.println(item.getPrice());
        }
    }
}