일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- jpa
- Java 스터디
- 비전공자 git
- 케네스
- 케네스로그
- JVM아키텍처
- 미국유학
- CSUS
- 해외유학
- 유학생 준비물
- 미국유학생활
- 미국대학
- 자바 스터디
- California State University Sacramento
- 개인 프로젝트 개발일지
- 유학생대학생활
- 미국대학생활
- java
- 개발일지
- 파이데이아창의인재학과
- F1학생비자
- 2+2
- 미국유학생
- 복수학위제도
- Kenneth Park
- 사이드프로젝트
- i-20
- 자바
- 만다라트프로젝트
- 부산외대
- Today
- Total
케네스로그
[Java] 배열의 선언과 메모리 할당 본문
배열이란?
배열은 같은 타입의 데이터를 연속적으로 저장한 자료구조입니다. 배열의 특징은 '정적'이라는 점과 '연속적'이라는 것이죠. 정적이라는 말은 처음 배열의 크기가 정해지면 크기를 변경할 수 없음을 뜻합니다. 연속적이라는 건 메모리 상에서 배열의 첫번째 요소는 두번째 요소와 연이어 붙어있다는 것을 말합니다. 즉, 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.
배열의 생성
int[] a = new int[4];
배열을 만들기 위해 new 키워드를 사용합니다. 위의 코드예시와 같은 int[] a = new int[4];와 같은 형식입니다. 이를 풀어서 이야기하자면, "4개의 정수를 저장할 수 있는 배열 객체를 만들고, a라는 reference type 변수에 저장하라"는 것입니다. 따라서, array객체는 힙 메모리에서 생성될 것입니다.
다차원 배열과 메모리 공간
컴퓨터의 메모리 공간은 격자식으로 시각화할 수 있습니다. 각 격자(cell)은 메모리 상에 데이터를 저장할 수 있는 한 공간이라고 할 수 있으며, 각 격자는 주소를 지닙니다. 컴퓨터는 랜덤으로 메모리의 공간에 할당합니다.
int[] nums = new int[4] {1,2,3,4};
1차원 정수형 배열을 생성하고, 4개의 정수를 이용해 초기화했습니다. 메모리상에는 다음과 같이 저장될 것입니다. 각 원소가 연속적으로 저장되는 것이죠.
int[][] nums = {{1,2,3,4},{2,4,6,8}};
위의 코드처럼, 2차원 배열을 선언해서 크기가 4인 1차원 배열을 각각 저장했습니다. 메모리 상에서는 다음과 같이 저장될 것입니다.
int[][][] scores = {{{-1,-2,-3,-4},{-2,-4,-6,-8}},{{1,2,3,4},{2,4,6,8}}};
3차원 배열을 나타내면 위와 같습니다. 오른쪽 그림처럼 선언된 배열 자체는 한개의 객체(1차원 배열)로 이루어져 있지만,
scores[0], scores[1]
위의 그럼치럼, 2개의 배열로 이루어져있습니다. 즉, 2*4크기의 배열이 2개 있는 것이죠.
scores[0][0], scores[0][1]
scores[1][0], scores[1][1]
위의 각 배열은 또다시 2개의 배열들로 이루어집니다. 즉, 크기가 4인 배열 4개가 2개의 배열에 의해 저장된 것입니다.
scores[0][0][0], scores[0][0][1], scores[0][0][2], scores[0][0][3]
scores[0][1][0], scores[0][1][1], scores[0][1][2], scores[0][1][3]
scores[1][0][0], scores[1][0][1], scores[1][0][2], scores[1][0][3]
...
scores[1][1][0], scores[1][1][1], scores[1][1][2], scores[1][1][3]
가장 하위 차원으로 내려오면 4개의 정수형 원소들입니다. 이것들이 모여 전체 배열을 구성하는 것이죠.
배열의 할당과 메모리 구조
배열의 할당과 메모리구조에 관해서는 이곳에서 자료구조 배열을 설명하면서 깊게 다루었습니다. 참조해주세요🙂
'Dev > Java' 카테고리의 다른 글
[Java] 산술연산자 (0) | 2022.02.04 |
---|---|
[Java] 타입 추론 var (0) | 2022.01.30 |
[Java] 타입 변환, 캐스팅, 타입 프로모션 (0) | 2022.01.30 |
[Java] 변수의 스코프와 라이프타임 (0) | 2022.01.30 |
[Java] 변수의 선언 및 초기화 방법 (0) | 2022.01.30 |