Java/강의

[📙 Java 문법 종합반] 1-9. 배열 - 데이터 관리의 시작

가지코딩 2025. 4. 15. 14:30

📙 목차

  1. 배열(Array)
  2. 배열 탐색
  3. 2차원 배열(Two-Dimensional Array)
  4. 실습과제

🧡 학습 목표

  • 배열(Array)이 무엇인지 학습한다.
  • 배열의 길이(Array length)와 요소(Array element)를 이해한다.
  • 인덱스(index) 를 활용해서 배열의 요소를 탐색하는 방법을 학습한다.
  • 향상된 반복문을 학습한다.
  • 2차원 배열이 무엇인지 학습한다.

1. 배열(Array)

배열 (Array)

  • 비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현하는 방법이다.
  • 관련된 데이터를 편리하게 관리하기 위해 사용된다.
  • 모든 자료형의 종류로 배열을 만들 수 있다.
String name1 = "gygim";
String name2 = "Steve";
String name3 = "Grace";
...
String name1000 = "Isac";
String[] adventurerList = {"gygim", "Steve", "Grace", ...};

 

 

배열의 길이 (Array Length)

  • 배열에 들어갈 수 있는 데이터의 개수를 의미한다.
  • 배열을 만들 때 한 번 크기를 정하면 변경할 수 없다 (: 정적배열)
배열이름.length
int arrLenght = adventurerList.length;

 

 

배열의 선언 (Array Declaration)

  • new 키워드를 사용해 배열을 선언할 수 있다.
자료형[] 변수이름 = new 자료형[배열의길이];
선언 후 길이 설정
int[] arr;
arr = new int[5];

선언과 길이 설정 동시에
int[] arr = new int[5];
// 문자열 배열 선언
String[] arrA = new String[5];

// 논리형 배열 선언
boolean[] arrB = new boolean[3];

 

 

배열의 크기

int[] arr = new int[5];

  • int 자료형의 크기: 4바이트
  • 길이가 5인 int 형 배열의 크기: 20바이트 (4바이트*5 = 20바이트)

 

배열의 요소

  • 배열 안에 들어있는 각각의 값을 배열의 요소라고 한다.
  • 배열 선언과 동시에 배열의 요소를 설정할 수도 있다.
int[] arr = {10, 20, 30, 40, 50}; // ✅ 배열 선언과 동시에 배열의요소 설정

 

 

인덱스(index) - 배열의 요소에 접근하는 방법

  • index 의 시작은 0 
  • 인덱스를 통해 원하는 배열의 요소에 빠르게 접근할 수 있다.
int[] arr = {10, 20, 30, 40, 50};

System.out.println("배열의 1번째 요소 = " + arr[0]);	// 10
System.out.println("배열의 2번째 요소 = " + arr[1]);	// 20
System.out.println("배열의 3번째 요소 = " + arr[2]);	// 30
System.out.println("배열의 4번째 요소 = " + arr[3]);	// 40
System.out.println("배열의 5번째 요소 = " + arr[4]);	// 50

 

* 인덱스 사용 시 주의사항

  • 배열의 범위에 벗어난 요소에 접근하려고 하면 ArrayIndexOutOfBoundsException 에러가 발생한다.
  • 인덱스(index) 를 활용할 때는 배열의 범위를 벗어나지 않게 주의해야 한다.
int[] arr = {10, 20, 30, 40, 50}; // 5개의 길이를 가진 배열
System.out.println("배열의 6번째 요소 = " + arr[5]); // ❌ 에러 발생

 

 

배열에 정보 삽입, 수정

  • 인덱스(index) 를 활용해 각 요소의 값을 삽입, 수정할 수 있다.
int[] arr = new int[5];
arr[0] = 100; // ✅ 1번째 요소를 100로 설정
arr[1] = 200; // ✅ 2번째 요소를 200로 설정
arr[2] = 300; // ✅ 3번째 요소를 300로 설정
arr[3] = 400; // ✅ 4번째 요소를 400로 설정
arr[4] = 500; // ✅ 5번째 요소를 500로 설정
arr[5] = 600; // ❌ 접근 불가
System.out.println("배열의 1번째 요소는 0번째 인덱스: " + arr[0]); // 100
System.out.println("배열의 2번째 요소는 1번째 인덱스: " + arr[1]); // 200
System.out.println("배열의 3번째 요소는 2번째 인덱스: " + arr[2]); // 300
System.out.println("배열의 4번째 요소는 3번째 인덱스: " + arr[3]); // 400
System.out.println("배열의 5번째 요소는 4번째 인덱스: " + arr[4]); // 500

2. 배열 탐색

인덱스(index) 를 활용해 배열을 탐색할 수 있다.

  • 변수를 인덱스(index) 로 활용하면 반복문을 통해 쉽게 배열을 탐색할 수 있다.
int[] arr = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.length; i++) {
    // ✅ 숫자대신 변수i 를 인덱스 활용 
    System.out.println("numbers[" + i + "] = " + arr[i]); 
}

 

회차 1번째 루프 2번째 루프 3번재 루프 4번째 루프 5번째 루프
i 변수의 값 0 1 2 3 4
코드 numbers[0] numbers[1] numbers[2] numbers[3] numbers[4]
의미 1번재 상자 2번재 상자 3번재 상자 4번재 상자 5번재 상자

 

 

향상된 for 문

  • 배열의 모든 요소를 하나씩 꺼내서 활용할 때 편리한 반복문이다.
  • index 를 직접 활용하지 못 한다.
  • IndexOutOfBoundsException 에러가 발생하지 않는다.
for(배열의요소 : 배열) {
	명령문;
}
int[] arr = {100, 200, 300, 400, 500};
for (int a : arr) {	// 배열 arr 에서 하나씩 꺼내서 a 에 저장
	System.out.println("배열의 각 요소 = " + a);
}

3. 2차원 배열(Two-Dimensional Array)

2차원 배열(Two-Dimensional Array)

  • 2차원적인 정보를 표현할 때 적합하다.
  • 첫 번째 인덱스는 행 = 가로 방향을 의미
  • 두 번째 인덱스는 열 = 세로 방향을 의미
boolean[][] board = new boolean[2][2];
boolean[][] board = {
    {true, false}, // 0행의 0열, 0행의 1열
    {false, true}  // 1행의 0열, 1행의 1열
};
System.out.println(board[0][0]); // true
System.out.println(board[0][1]); // false
System.out.println(board[1][0]); // true
System.out.println(board[1][1]); // false


4. 실습과제

(1) 1차원 배열에서 짝수만 출력하기

아래의 정수 배열이 주어졌을 때 짝수만 출력하세요.
배열 예시: {3, 4, 7, 10, 15, 20}

package chapter1;

public class EvenNumberFinder {
    public static void main(String[] args) {
        int[] arr = {3, 4, 7, 10, 15, 20};

        System.out.print("짝수: ");
        for(int a: arr){
            if(a%2==0){
                System.out.print(a + " ");
            }
        }
    }
}

 

 

(2) 1차원 배열의 누적합 구하기

아래의 정수 배열의 누적합을 구하세요.

배열 예시: {2, 5, 8}

package chapter1;

public class PrefixSum {
    public static void main(String[] args) {
        int[] arr = {2, 5, 8};
        int sum=0;
        for(int a: arr) {
            sum += a;
        }
        System.out.println("누적합: "+ sum);
    }
}

 

 

(3) 2차원 배열에서 검은돌(true)의 좌표(x, y) 찾기

// 배열 예시
boolean[][] board = {
            {true, false},
            {false, true}
};

 

package chapter1;

public class BlackStoneFinder {
    public static void main(String[] args) {
        boolean[][] board = {
                {true, false},
                {false, true}
        };

        for(int i=0; i<board.length; i++) {
            for(int j=0; j<board[i].length; j++) {
                if(board[i][j]) {
                    System.out.printf("검은돌(●) 위치: (%d,%d)\n", i, j);
                }
            }
        }
    }
}