이번 포스팅에서는 컴퓨터 메모리에서 배열이 어떤 형태로 존재하는 지에 대해 알아보고자 한다.
1. 배열의 크기
먼저, 배열은 선언한 배열이 가지고 있는
데이터의 자료형의 크기만큼의 메모리 크기가 할당된다.
예를 들어, 아래와 같이 3개의 정수데이터를 담을 수 있는 정수형의 배열을 선언했다고 해보자.
int[] arr=new int[3];
그러면 컴퓨터 메모리에서는 아래 이미지와 같이 메모리크기를 할당하게 된다.
정수형인 int는 4byte의 크기만큼을 가지므로 총 12byte가 할당되는 것이다.
2. 배열변수와 메모리
그렇다면 위에서 선언한 arr이라는 변수는 12byte를 가지고 있는걸까?
답은 아니다.
int와 같은 기본 자료형과 달리 배열변수는 참조 자료형으로
해당 배열 데이터가 있는 곳의 메모리 주소를 가지고 있게 된다.
아래 이미지를 보자.
이 이미지는 왼쪽에서는 i에 10이라는 값을 넣고 오른쪽에서는 배열변수 i에 10,20,30의 값을 넣은 것을 표현하고 있다.
위 이미지와 같이 같은 i라는 변수지만 저장되는 값은 다르다.
좀 더 자세히 설명해 보면,
왼쪽의 int i=10 에서는 i가 기본 자료형인 int이기 때문에 i안에 10이라는 값이 들어가게 되지만
오른쪽의 int[] i에서는 i가 배열변수이기 때문에 12byte만큼의 크기를 가진 곳의 메모리 주소를 담고있는 것이다.
[예시]
실제 코드로 작성해서 간단하게 확인해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Main {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7};
System.out.println("arr: "+Arrays.toString(arr));
System.out.println("arr 주소: "+arr);
}
}
|
cs |
먼저 arr을 초기화 시켜놓고 로그를 찍어보자.
로그를 보면 arr에 값이 무사히 들어가 있고 주소가 이상한 값들이 막 출력되는 것을 볼 수 있는데
이 값이 메모리 주소를 16진수로 나타낸 값이다.
즉, arr변수 안에는 메모리 주소값이 담겨있는 것을 알 수 있다.
3. 다차원 배열
다차원 배열이란 배열 안에 또 다른 배열이 존재하는 것이다.
사용 방법은 기존에 배열선언한 것처럼 하고 뒤에 []을 한개 더 붙여주면 된다.
다차원 배열에 관한 예시를 들면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Main {
public static void main(String[] args) {
// 다차원 배열
int[][] arrMul = new int[3][2];
arrMul[0][0] = 10;
arrMul[0][1] = 100;
arrMul[1][0] = 20;
arrMul[1][1] = 200;
arrMul[2][0] = 30;
arrMul[2][1] = 300;
System.out.println("arrMul[0] : " + Arrays.toString(arrMul[0]));
System.out.println("arrMul[1] : " + Arrays.toString(arrMul[1]));
System.out.println("arrMul[2] : " + Arrays.toString(arrMul[2]));
}
}
|
cs |
이 코드는 다차원 배열 중 2차원 배열에 관한 코드이다.
위의 코드를 실행하면 아래와 같이 로그가 찍히게 된다.
좀 더 부연설명을 해 보자면
각 배열 방에 넣은 값들은 아래 이미지와 같이 들어가게 된다.
Reference
이 포스팅은 아래의 강좌를 참고하여 만들어졌습니다.
- 자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94_java-renew/dashboard
'Language > Java' 카테고리의 다른 글
[Java]조건문 if 와 switch문 개념 정리 및 예제 (0) | 2020.08.17 |
---|---|
[Java]특수문자와 서식 문자,소수점 제한 처리 정리 및 예제 (0) | 2020.08.15 |
[Java]배열의 개념, 선언및 초기화하는 방법+예제 (2) | 2020.08.11 |
[Java]자바의 연산자의 종류 및 설명, 예시 (1) | 2020.08.06 |
[JAVA]자료형에 대해 정리해보자(기본자료형과 객체자료형 차이, 기본자료형, 자동 형 변환과 명시적 형 변환) (0) | 2020.07.29 |