[Java] 배열에 대해서

2026. 4. 22. 09:58·Language/Java

* 개념 복습과 학습 정도를 파악하고자 포스팅합니다!

 

배열(Array)

1. 배열이란?

같은 타입의 데이터를 연속된 메모리 공간에 순서대로 저장하는 자료구조.

인덱스(0부터 시작)로 각 요소에 접근할 수 있습니다.


2. 배열 선언과 생성

배열을 만드는 방법이 세 가지가 있습니다!

  • 선언 후 생성
  • 선언과 동시에 생성
  • 선언과 동시에 초기화

가장 먼저 선언 후 생성 방법을 정리하자면 이런식으로 작성할 수 있겠네요.

// 방법 1 — 선언 후 생성
int[] arr;            // 선언 (참조변수만 만들어짐)
arr = new int[5];     // 생성 (메모리 할당)

 

다음은 선언과 동시에 생성입니다.

// 방법 2 — 선언과 동시에 생성
int[] arr = new int[5];   // 기본값 0으로 초기화

 

마지막으로 선언과 동시에 초기화 방법입니다.

// 방법 3 — 선언과 동시에 초기화
int[] arr = {90, 85, 72, 95, 88};  // new int[] 생략 가능
int[] arr = new int[]{90, 85, 72, 95, 88};  // 명시적 작성

이렇게 총 세 가지의 방법이 있습니다.

 

타입별 기본값은 정수(int, long 등)는 0, 실수(double, float)는 0.0, 논리(boolean)는 false, 참조 타입(String, 객체 등)은 null 입니다.


3. 배열 접근과 수정

int[] scores = {90, 85, 72, 95, 88};

// 읽기
System.out.println(scores[0]);  // 90
System.out.println(scores[4]);  // 88

// 수정
scores[2] = 100;
System.out.println(scores[2]);  // 100

// 길이
System.out.println(scores.length);  // 5 (메서드 아닌 필드!)

// 마지막 요소
System.out.println(scores[scores.length - 1]);  // 88

 

배열변수[인덱스]으로 접근하고, 배열변수[인덱스] = 값; 으로 수정을 진행합니다.

score.length는 메서드가 아니라 필드입니다. ()를 붙이면 안돼요!


4. 배열과 반복문

기본 for문

int[] scores = {90, 85, 72, 95, 88};

for (int i = 0; i < scores.length; i++) {
    System.out.println(i + "번 인덱스: " + scores[i]);
}

 

향상된 for문 (Enhanced for)

일기 전용으로 순회할 때 더 간결합니다.

for (int score : scores) {
    System.out.println(score);  // 90 85 72 95 88 순서대로
}

인덱스가 필요 없을 때는 향상된 for문이 훨씬 깔끔해요. 단, 인덱스 접근이나 값 수정은 불가능합니다.


5. 2차원 배열

행과 열로 이루어진 표 형태의 배열입니다.

// 선언과 생성
int[][] matrix = new int[3][4];  // 3행 4열

// 선언과 초기화
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 접근
System.out.println(matrix[0][0]);  // 1  (0행 0열)
System.out.println(matrix[1][2]);  // 6  (1행 2열)
System.out.println(matrix[2][1]);  // 8  (2행 1열)

// 순회
for (int i = 0; i < matrix.length; i++) {          // 행
    for (int j = 0; j < matrix[i].length; j++) {   // 열
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}
// 1 2 3
// 4 5 6
// 7 8 9

matrix.length는 행의 수, matrix[i].length는 열의 수입니다.


6. 배열 관련 메서드

Arrays 클래스

java.util.Arrays 클래스에 배열을 다루는 유용한 메서드들이 모여있습니다.

사용하려면 import java.util.Arrays; 가 필요해요.

 

Arrays.sort() - 정렬

import java.util.Arrays;

int[] arr = {5, 3, 8, 1, 4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));  // [1, 3, 4, 5, 8]

// 내림차순 — Integer[] 필요
Integer[] arr2 = {5, 3, 8, 1, 4};
Arrays.sort(arr2, (a, b) -> b - a);
System.out.println(Arrays.toString(arr2));  // [8, 5, 4, 3, 1]

// 부분 정렬 — [from, to) 범위만 정렬
int[] arr3 = {5, 3, 8, 1, 4};
Arrays.sort(arr3, 1, 4);   // 인덱스 1~3만 정렬
System.out.println(Arrays.toString(arr3));  // [5, 1, 3, 8, 4]

 

Arrays.toString() - 문자열 반환

배열을 "[1, 2, 3]" 형태로 출력할 때 써요. 배열을 직접 println하면 주소값이 출력되기 때문에 이 메서드를 사용해야 합니다.

int[] arr = {1, 2, 3, 4, 5};

System.out.println(arr);               // [I@1b6d3586  (주소값!)
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5]

// 2차원 배열은 deepToString
int[][] matrix = {{1,2},{3,4}};
System.out.println(Arrays.deepToString(matrix));  // [[1, 2], [3, 4]]

 

Arrays.copyOf() / Arrays.copyOfRange() - 복사

int[] original = {1, 2, 3, 4, 5};

// copyOf — 앞에서부터 n개 복사
int[] copy1 = Arrays.copyOf(original, 3);
System.out.println(Arrays.toString(copy1));  // [1, 2, 3]

// 원본보다 크게 복사하면 나머지는 기본값
int[] copy2 = Arrays.copyOf(original, 8);
System.out.println(Arrays.toString(copy2));  // [1, 2, 3, 4, 5, 0, 0, 0]

// copyOfRange — [from, to) 범위 복사
int[] copy3 = Arrays.copyOfRange(original, 1, 4);
System.out.println(Arrays.toString(copy3));  // [2, 3, 4]

 

Arrays.fill() - 값 채우기

int[] arr = new int[5];

// 전체 채우기
Arrays.fill(arr, 7);
System.out.println(Arrays.toString(arr));  // [7, 7, 7, 7, 7]

// 범위 채우기 — [from, to)
Arrays.fill(arr, 1, 4, 0);
System.out.println(Arrays.toString(arr));  // [7, 0, 0, 0, 7]

 

Arrays.equals() - 배열 비교

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
int[] c = {1, 2, 4};

System.out.println(a == b);               // false  (주소 비교!)
System.out.println(Arrays.equals(a, b));  // true   (내용 비교)
System.out.println(Arrays.equals(a, c));  // false

// 2차원 배열은 deepEquals
int[][] d = {{1,2},{3,4}};
int[][] e = {{1,2},{3,4}};
System.out.println(Arrays.deepEquals(d, e));  // true

배열도 String 처럼 ==은 주소 비교이기 때문에 내용 비교에는 반드시 Arrays.equals()를 사용해야 해요.

 

Arrays.binarySearch() - 이진 탐색

반드시 정렬된 배열에서만 사용해야 합니다. 찾은 인덱스를 반환합니다.

int[] arr = {1, 3, 5, 7, 9};  // 정렬된 상태여야 함

int idx = Arrays.binarySearch(arr, 7);
System.out.println(idx);  // 3  (인덱스 3에 있음)

int notFound = Arrays.binarySearch(arr, 4);
System.out.println(notFound);  // 음수 반환 (없으면 음수)

 


배열은 크기가 고정이라는 단점이 존재합니다.

크기를 동적으로 늘려야 한다면 컬렉션 프레임워크(ArrayList 등)를 쓰면 돼요!

 

빠르게 정리해서 컬렉션 프레임워크도 공부해야겠네요 ㅎㅎ

'Language > Java' 카테고리의 다른 글

[Java] String 파헤치기  (0) 2026.04.23
[Java]내부 클래스 정리  (0) 2026.04.22
[Java] 추상 클래스 & 인터페이스 완전히 정리해버리기  (0) 2026.04.22
[Java] 상속 완전히 정리해버리기  (0) 2026.04.22
[Java] 생성자 & 캡슐화 완전히 정리해버리기  (0) 2026.04.22
'Language/Java' 카테고리의 다른 글
  • [Java] String 파헤치기
  • [Java]내부 클래스 정리
  • [Java] 추상 클래스 & 인터페이스 완전히 정리해버리기
  • [Java] 상속 완전히 정리해버리기
BackendInho
BackendInho
항상 열정적으로 부딪히고 깨닫는 주니어 백엔드 개발자의 여정을 기록합니다!
  • BackendInho
    Inho.devlog
    BackendInho
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • TIL (0)
      • Language (21)
        • Java (21)
      • Backend (8)
        • Spring (8)
      • Database (0)
        • SQL (0)
      • CS (8)
        • Computer Structure (2)
        • Network (2)
        • OS (1)
        • Data Structure & Algorithms (3)
      • Devops (0)
        • Docker & Kubernetes (0)
      • Coding-Test (1)
        • Programmers (3)
        • LeatCode (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    API
    CS
    HTTP
    java
    REST
    REST API
    Spring
    Spring Boot
    Web
    공간복잡도
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BackendInho
[Java] 배열에 대해서
상단으로

티스토리툴바