[JAVA] ARRAY

성장일기·2024년 7월 15일
0

[SWCAMP] JAVA

목록 보기
6/16

배열

배열 정의 및 사용 이유

💡 동일한 자료형(Data Type)의 묶음이다. 연속된 메모리 공간에 값을 저장하고 사용하기 위한 용도로 사용된다.
배열은 heap 영역에 new 연산자를 통해 할당된다.
또한 배열의 길이는 최초 선언한 값으로 “고정” 되며, 인덱스를 통해 데이터에 접근할 수 있다.

배열을 사용하는 이유

  • 만약 배열을 사용하지 않는다면 동일한 자료형을 가진 다양한 값들을 각각의 변수에 저장하여 사용해야 한다.
    (모든 변수의 이름을 사용자가 관리해야 한다.)
  • 연관된 데이터를 저장하기 위한 변수의 선언을 줄여주며, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.

배열

1차원 배열 선언

  • 배열을 선언할 때 여러가지 방법이 있다.
    • 참조 변수만 먼저 선언하여 크기 및 값을 이후에 초기화
    • 최초 선언 시 배열의 크기 및 값을 할당
  • 배열에 있는 값에 접근 하기 위해서는 인덱스를 이용해서 접근할 수 있다.
    인덱스는 정수(음수X)만 가능하며, 0부터 시작하기 때문에 배열의 크기를 5라고 할당하였다면 0 ~ 4 까지의 인덱스를 이용해 배열에 접근할 수 있다.

2차원 배열 선언

  • 2차원 이상의 배열은 다차원 배열이라고 한다. 일부 인덱스는 또 다른 배열의 주소를 보관하는 배열 역할을 한다.
  • 즉, 2차원 배열은 1차원 배열 여러 개를 하나로 묶어서 관리하는 배열이다.
  • 더 많은 차원의 배열을 사용할 수 있지만 일반적으로는 2차원 배열보다 더 높은 차원의 배열은 사용 빈도가 극히 적다.(인지 범위 초과)
  • 2차원 배열은 [ ] 를 2개를 사용하여 표현한다. 아래 예제의 배열은 3행 4열인 2차원 배열이라고 부른다.

  • 2차원 배열에서 앞에 대괄호 안에 있는 숫자는 행, 뒤에 있는 대괄호 안에 있는 숫자는 열이라고 여겨도 무관하다.

배열의 복사

💡 자바에서는 배열은 목적에 따라 복사를 해야 할 경우가 있으며 유형으로는 얕은 복사와 깊은 복사가 있다.

복사의 종류

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

얕은 복사 개요

💡 얕은 복사는 stack에 저장되어 있는 배열의 주소값만 복사한다는 것이다.
따라서 두 개의 레퍼런스 변수는 동일한 배열의 주소값을 가지고 있다.
하나의 레퍼런스 변수에 저장된 주소 값을 가지고 배열의 내용을 수정(값 변경) 을 하게 되면
다른 레퍼런스 변수로 배열에 접근했을 때도 동일한 배열을 가리키고 있기 때문에 변경된 값이 반영되어 있다.

  • 얕은 복사를 도식화한 그림을 보면 알 수 있듯이 얕은 복사는 레퍼런스 변수 안에 담긴 주솟값을 새로운 레퍼런스 변수에 복사하는 것이다.

깊은 복사 개요

💡 깊은 복사는 heap에 생성된 배열이 가지고 있는 값을 또 다른 배열에 복사를 해 놓은 것이다.
서로 같은 값을 가지고 있지만, 두 배열은 서로 다른 배열이기에
하나의 배열에 변경을 하더라도 다른 배열에는 영향을 주지 않는다.

  • 깊은 복사는 얕은 복사와 달리 새롭게 할당한 힙 영역에 기존 배열의 값을 복사한 후 새롭게 생성된 배열의 주솟값을 넘겨주는 것이다.
profile
엔지니어로의 성장일지

0개의 댓글