[Java] 배열

허경두·2025년 4월 2일

Java

목록 보기
5/12

배열이란?

배열(array) : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 (0~n개)
배열의 선언 : 타입[] 변수이름;

  • 2차원 배열 : 타입[][] 변수이름;

배열의 생성 : new 타입[길이];

  • 2차원 배열 : new 타입[행][열];
int[] arr; // 선언
arr = new int[5]; // 생성
for (int i = 0; i < arr.length; i++) // 배열 초기화
	arr[i] = i * 10;
int[] arr2 = new int[]{1, 2, 3, 4, 5}; // 배열 선언 + 생성 + 초기화 (new int[] 부분은 생략 가능)

배열은 생성 이후 길이를 변경할 수 없다
→ 저장 공간이 연속적으로 배치되어 있기 때문에 크기를 늘리려고 하면 overrun 발생 가능성이 있다 (보안 문제 가능성 있음)

  • overrun이란? 시스템이 처리할 수 있는 용량(capacity)을 초과하여 데이터가 손실되거나 잘못된 동작이 발생하는 현상

관련된 데이터를 잘 묶는 것이 핵심

배열의 복사

  1. 새로운 배열 생성 후 기존 배열의 요소 복사 (반복문 사용)
  2. System.arraycopy() 사용 (더 효율적이다)
    네이티브 코드를 사용해서 메모리 블록 단위로 복사하기 때문에 반복문보다 훨씬 빠르다
    public static native void arraycopy(
       Object src,  // 원본 배열
       int srcPos,  // 원본 배열에서 복사 시작 위치
       Object dest, // 대상 배열
       int destPos, // 대상 배열에서 붙여넣기 시작 위치
       int length   // 복사할 요소 개수
    );

String

String 클래스는 char 배열에 기능(메서드)을 추가한 것이다

  • Java String 클래스 주요 메서드

    메서드설명반환 타입예제
    charAt(int index)문자열에서 지정된 index의 문자 반환char"hello".charAt(1)'e'
    length()문자열의 길이(문자 개수) 반환int"hello".length()5
    substring(int beginIndex, int endIndex)beginIndex부터 endIndex 전까지의 부분 문자열 반환String"hello".substring(1, 4)"ell"
    equals(Object obj)두 문자열이 같은지 비교 (대소문자 구분)boolean"hello".equals("Hello")false
    toCharArray()문자열을 문자 배열로 변환char[]Arrays.toString("hi".toCharArray())"[h, i]"

2차원 배열 C vs. Java

구분C 언어Java
저장 방식연속된 메모리 블록 (Row-Major Order)"배열의 배열" (참조 기반)
메모리 배치모든 행이 연속 저장됨행별로 개별 배열을 가리킴
메모리 접근 속도빠름 (연속된 메모리)상대적으로 느림 (참조 접근)
가변 배열 지원불가능 (고정 크기)가능 (각 행의 길이 다름)
주소 출력행과 열이 같은 메모리 블록에 존재각 행이 개별적인 주소를 가짐
  • C : 연속 저장

    메모리 주소배열 인덱스
    0x1000arr[0][0]
    0x1004arr[0][1]
    0x1008arr[0][2]
    0x100Carr[1][0]
    0x1010arr[1][1]
    0x1014arr[1][2]
  • Java : 행별로 개별 배열 참조

    • arr

      참조 주소저장된 값배열 인덱스
      0x20000x3000arr[0] (참조)
      0x20040x4000arr[1] (참조)
    • arr[0]

      메모리 주소저장된 값배열 인덱스
      0x3000arr[0][0]
      0x3004arr[0][1]
      0x3008arr[0][2]
    • arr[1]

      메모리 주소저장된 값배열 인덱스
      0x4000arr[1][0]
      0x4004arr[1][1]
      0x4008arr[1][2]

가변배열

0개의 댓글