Java 26일 코스 - Day 6: 배열

Day 6: 배열

배열은 같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다. 크기가 고정되어 있으며, 인덱스를 통해 빠르게 접근할 수 있습니다. 인덱스는 0부터 시작합니다.

배열 선언과 초기화

배열을 만드는 여러 가지 방법을 알아봅니다.

public class ArrayBasic {
    public static void main(String[] args) {
        // 방법 1: 크기만 지정 (기본값으로 초기화)
        int[] numbers = new int[5]; // [0, 0, 0, 0, 0]
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;

        // 방법 2: 선언과 동시에 초기화
        int[] scores = {95, 80, 70, 100, 88};

        // 방법 3: new 키워드와 함께 초기화
        String[] fruits = new String[]{"사과", "바나나", "포도"};

        // 배열 길이
        System.out.println("배열 길이: " + scores.length); // 5

        // 인덱스로 접근
        System.out.println("첫 번째 점수: " + scores[0]); // 95
        System.out.println("마지막 점수: " + scores[scores.length - 1]); // 88

        // 배열 요소 출력
        for (int i = 0; i < fruits.length; i++) {
            System.out.println("과일 " + (i + 1) + ": " + fruits[i]);
        }
    }
}

향상된 for 문 (for-each)

배열의 모든 요소를 순회할 때 간결하게 사용할 수 있습니다.

import java.util.Arrays;

public class EnhancedForLoop {
    public static void main(String[] args) {
        int[] numbers = {15, 23, 8, 42, 37, 11, 29};

        // 향상된 for문으로 전체 출력
        for (int num : numbers) {
            System.out.print(num + " ");
        }
        System.out.println();

        // 합계와 평균 구하기
        int sum = 0;
        for (int num : numbers) {
            sum += num;
        }
        double average = (double) sum / numbers.length;
        System.out.println("합계: " + sum);
        System.out.println("평균: " + average);

        // 최대값, 최소값 찾기
        int max = numbers[0];
        int min = numbers[0];
        for (int num : numbers) {
            if (num > max) max = num;
            if (num < min) min = num;
        }
        System.out.println("최대값: " + max);
        System.out.println("최소값: " + min);

        // Arrays 유틸리티 클래스
        Arrays.sort(numbers); // 정렬
        System.out.println("정렬: " + Arrays.toString(numbers));
    }
}

다차원 배열

행과 열로 이루어진 2차원 배열을 다뤄봅니다.

public class MultiDimensionalArray {
    public static void main(String[] args) {
        // 2차원 배열 선언
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        // 2차원 배열 출력
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.printf("%3d", matrix[i][j]);
            }
            System.out.println();
        }

        // 향상된 for문으로 2차원 배열 순회
        int total = 0;
        for (int[] row : matrix) {
            for (int val : row) {
                total += val;
            }
        }
        System.out.println("전체 합계: " + total);

        // 가변 길이 배열 (jagged array)
        int[][] jagged = new int[3][];
        jagged[0] = new int[]{1, 2};
        jagged[1] = new int[]{3, 4, 5};
        jagged[2] = new int[]{6};

        for (int[] row : jagged) {
            System.out.println(java.util.Arrays.toString(row));
        }
    }
}

배열 복사와 비교

배열을 복사할 때 주의할 점을 알아봅니다.

import java.util.Arrays;

public class ArrayCopy {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};

        // 얕은 복사: 참조만 복사 (같은 배열을 가리킴)
        int[] shallow = original;
        shallow[0] = 999;
        System.out.println("원본[0]: " + original[0]); // 999 (변경됨!)

        // 깊은 복사 방법들
        int[] copy1 = Arrays.copyOf(original, original.length);
        int[] copy2 = original.clone();
        int[] copy3 = new int[original.length];
        System.arraycopy(original, 0, copy3, 0, original.length);

        copy1[0] = 111;
        System.out.println("원본[0]: " + original[0]); // 999 (영향 없음)
        System.out.println("복사본[0]: " + copy1[0]);   // 111

        // 배열 비교
        int[] a = {1, 2, 3};
        int[] b = {1, 2, 3};
        System.out.println(a == b);              // false (참조 비교)
        System.out.println(Arrays.equals(a, b)); // true (내용 비교)
    }
}

오늘의 연습문제

  1. 점수 통계: 학생 10명의 점수를 배열에 저장하고, 최고점, 최저점, 평균, 평균 이상인 학생 수를 출력하는 프로그램을 작성하세요.

  2. 배열 뒤집기: 정수 배열 {1, 2, 3, 4, 5, 6, 7}을 새 배열 없이 원본 배열 안에서 뒤집는(reverse) 프로그램을 작성하세요. (swap 활용)

  3. 행렬 덧셈: 3x3 크기의 두 2차원 배열을 선언하고, 두 행렬의 같은 위치 요소를 더한 결과 행렬을 출력하는 프로그램을 작성하세요.

이 글이 도움이 되었나요?