[커널아카데미] 백엔드 개발 부트캠프 12기 2주차 - 배열 요약

굴착드릴·2025년 4월 4일

실시간 강의와 온라인 강의를 기반으로 요약했습니다.

배열 특징

  1. 크기 변경 x → 크기 변경 시 새로 만들거나 기존 내용 복사
    1. 보안상 이유 (다른 메모리영역 침범 = overrun)로 크기 변경 불가
  2. 모두 같은 타입 (같은 사이즈)

2차원 배열의 주소

  • 2차원 배열 전체 주소는 연속적인 것이 아님
  • 1차원 배열 내부는 연속된 주소, 1차원 배열끼리는 연속된 주소 x
int[][] arr = new int[2][5];

// arr[0][0] ~ arr[0][4] 연속
// arr[1][0] ~ arr[1][4] 연속
// ...

// // arr[0][4] 와 arr[1][0] 은 연속 x

배열 선언

int[] a; 🟢 // java style
int a[]; 🟡 // c or c++ style, 허용해주긴 하지만 비추천

배열 생성 및 초기화

int[] a;
a = new int[5]; // 🟢
int[] b = new int[5]; // 🟢

/* ----------------------------- */

int[] c = {1, 2, 3, 4, 5}; // 🟢
int[] d = new int[]{1, 2, 3, 4, 5}; // 🟡 그냥 int d = {1, 2, 3, 4, 5} 추천

/* ----------------------------- */

int[] e;
int e = new int[]{1, 2, 3, 4, 5}; // 🟢

int[] f;
int f = {1, 2, 3, 4, 5}; // 🔴 이렇게 하면 안됨. 위와 같이 사용해야 함

배열 요소 출력

import java.util.Arrays;

int[] a = {1, 2, 3, 4, 5);
System.out.println(Arrays.toString(a));

>> [1, 2, 3, 4, 5]

// or

for(int i = 0; i < a.length; i++) { // index 접근
	System.out.print(a[i]);
}

>> 12345

// or
for (int num : a) { // 향상된 for문
    System.out.print(num);
}
>> 12345

// or

int i = 0;
while (i < a.length) {
    System.out.print(a[i]);
    i++;
}

>> 12345

// or

int i = 0;
do {
    System.out.print(a[i]);
    i++;
} while (i < a.length);

>> 12345

// or

import java.util.Arrays;

Arrays.stream(a).forEach(System.out::print); // JAVA 8+

>> 12345

// or

import java.util.stream.IntStream;

IntStream.range(0, a.length)
         .forEach(i -> System.out.print(a[i])); // JAVA 8+

>> 12345

✅ 요약 비교

방법인덱스 사용가독성특징
Arrays.toString❌ 불가✅ 높음다차원은 Arrays.deepToString 사용
기본 for문✅ 가능보통가장 유연함
향상된 for❌ 불가✅ 높음간단한 반복에 최적
while문✅ 가능보통조건이 외부적일 때
do-while문✅ 가능낮음무조건 1회 실행
Stream API❌ (기본)✅ 선언형filter, map 등 조합 가능 병렬 사용 가능

Arrays 클래스

toString() / deepToString()

  • 출력에서 설명

equals() / deepEquals()

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

Arrays.eqauls(arr1, arr1); // true

int[][] arr2D = {{11, 12}, {21, 22}};

Arrays.deepEquals(arr2D, arr2D); // true

copyOf(), copyOfRange()

int[] original = {1, 2, 3, 4, 5};
int[] copied = Arrays.copyOf(original, 3);

System.out.println(Arrays.toString(copied)); // [1, 2, 3]
Arrays.copyOf(original, 7); // [1, 2, 3, 4, 5, 0, 0]

System.out.println(Arrays.toString(copied)); // [2, 3, 4]
Arrays.copyOfRange(original, 3, 7); // [4, 5, 0, 0]

sort()

  • 오름차순 정렬
int[] arr = { 3, 1, 0, 2, 4 };
Arrays.sort(arr);

System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4];

유틸 메소드

System.arraycopy()

  • 주소를 통째로 복사하기 때문에 성능이 빠름
profile
두두두두..

0개의 댓글