[Beyond SW] 20251022

이경민·2025년 10월 22일

한화시스템 Beyond SW

목록 보기
15/40

배열

: 동일한 자료형의 묶음
연속된 메모리 공간에 값을 저장,사용
heap 영역에 new 연산자를 통해 할당됨
배열의 길이는 최초 선언한 값으로 고정
인덱스를 통해 데이터에 접근 가능
-> 변수의선언을 줄여주며, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있음


① 참조 변수만 선언 후 초기화 나중에 크기 지정 int[] arr; arr = new int[5]; 크기만 정해놓고 나중에 값 할당
② 선언과 동시에 값 초기화 한 번에 선언 + 값 지정 int[] arr = {1,2,3,4}; 가장 간단하고 직관적

향상된 for문
for(한번의 반복문에서 사용될 변수 : 반복을 수행할 배열){}
배열 인덱스에 담긴 값을 꺼내 int i 라는 변수로 옮겨 담아서 사용하는 맥락이므로 i 변수에 값을 대입하더라도 배열 인덱스의 값은 변경되지 않는다. 따라서 배열인덱스의 값을 변경하고자 할때는 사용할 수 없다.

new 연산자
새로운 공간을 힙(Heap) 메모리에 할당
생성된 객체나 배열의 주소(참조값)가 반환되며,
이를 참조 변수에 저장 -> 따라서 '참조 자료형'이라고 함

heap 영역은 이름으로 접근하지 않고 주소값으로 접근하는 영역이다.
stack에 저장된 주소로 heap에 할당된 배열을 찾아갈 수 있다.

hashCode() : 객체의 주소값을 10진수로 변환하여 생성한 객체의 고유 정수값을 반환하는 메소드.

String 클래스는 메소드로 제공하여 length()로 사용하는 점에 유의한다.

한 번 지정한 배열의 길이는 변경할 수 없다. 새로운 배열을 생성하여 그 주소값을 레퍼런스 변수에 담는다.

레퍼런스 변수가 아무런 주소를 참조하지 않는 상태를 null이라고 한다.
100개짜리의 배열이 더이상 참조되지 않으므로 GC(가비지컬렉터)에 의해 제거된다
null이라는 특수한 값을 참조하고 있을경우 참조연산자(.) 사용시
java.lang.NullPointerException이 발생한다.

2차원 배열

: 1차원 배열 여러 개를 하나로 묶어서 관리하는 배열



2차원 가변 배열 선언 및 할당
: 가변 배열의 경우 각 인덱스별 1차원 배열을 따로 할당해야한다.
int[][] iarr = new int[3][];

구분정방형 배열가변 배열
구조모든 행 길이가 동일각 행 길이가 다를 수 있음
선언int[][] arr = new int[3][4];int[][] arr = new int[3][]; 후 각 행 별로 할당
메모리연속적행마다 따로 할당
장점단순, 효율적유연, 필요에 따라 행 길이 다르게 가능
단점유연성 낮음메모리 연속성 없어서 성능 약간 저하 가능

배열의 복사

  1. 얕은 복사(shallow copy) : stack 의 주소값만 복사, 원본을 공유 할 목적
  2. 깊은 복사(deep copy) : heap의 배열에 저장된 값을 복사, 원본과 사본을 분리하여 관리 할 목적

얕은복사

int[] copy = origin;

stack에 저장되어있는 배열의 주소값 복사
두 개의 레퍼런스 변수는 동일한 배열의 주소값을 가지고 있다.

깊은 복사

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

        int[] copy1 = new int[10];
        for(int i = 0; i < origin.length; i++){
            copy1[i] = origin[i];
            }

heap에 생성된 배열이 가지고 있는 을 또다른 배열에 복사를 해놓은 것.
서로 같은 값을 가지고 있지만 두배열은 서로 다른 배열임.
따라서 하나의 배열이 변경되더라도 다른 배열에는 영향을 주지 않음.
얕은복사와 달리 새롭게 할당한 힙영역에 기존 배열의 값을 복사한 후 새롭게 생성된 배열의 주솟값을 넘겨줌.

clone 메소드
동일한 길이, 동일한 값을 가진 배열의 복제본이 생성됨
int[] copy2 = origin.clone();

arraycopy 메소드
arraycopy(원본배열, 복사를 시작할 인덱스, 복사본 배열, 복사를 시작할 인덱스, 복사할길이)

int[] copy3 = new int[10];
System.arraycopy(origin, 0, copy3, 3, origin.length);

Arrays의 copyOf 메소드

int[] copy4 = Arrays.copyOf(origin, 7);
int[] copy5 = Arrays.copyOf(copy4, 3);

얕은 복사 → 스택에 있는 참조값만 복사 (주소 공유)
깊은 복사 → 힙에 새로운 배열을 만들어 값 복사 (주소 달라짐, 독립적)

Stack: 메모리 영역. 변수의 참조값(주소) 저장.
Heap: 실제 배열 / 객체 데이터.

char은 문자1개
String은 문자열

2차원 배열 행열
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33

0개의 댓글