
* 개념 복습과 학습 정도를 파악하고자 포스팅합니다!
배열(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 |