일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 케네스
- i-20
- JVM아키텍처
- 자바 스터디
- F1학생비자
- CSUS
- 부산외대
- 케네스로그
- 비전공자 git
- Java 스터디
- 개인 프로젝트 개발일지
- 개발일지
- 미국대학
- California State University Sacramento
- 만다라트프로젝트
- 해외유학
- 미국유학생
- 유학생 준비물
- java
- 유학생대학생활
- 복수학위제도
- 2+2
- 미국대학생활
- 미국유학
- 자바
- 파이데이아창의인재학과
- jpa
- 사이드프로젝트
- 미국유학생활
- Kenneth Park
- Today
- Total
케네스로그
[자료구조] 배열, 다차원배열 본문
배열이란
자료구조는 데이터를 효율적을 관리하기 위해 고안된 저장 및 관리 방식입니다.
자료구조 중 하나인 배열은 동일한 타입의 데이터를 연속적으로 나열하고, 데이터의 순서에 따른 번호(인덱스)를 통해 데이터를 제어합니다. 배열의 특성은 다음과 같습니다.
- 순서가 존재하며, 색인(index)를 통해 데이터에 접근할 수 있다.
- 같은 자료형의 데이터가 연속적으로 저장된다.
- 처음 배열이 선언될 때 정해진 크기를 변경할 수 없다.
예시
종이책(데이터)이라는 같은 물질적 형태의 물건들를 효율적으로 적재하기 위한 틀을 책장(배열)이라고 합니다. 처음 가구를 만들때 정해진 크기(배열의 크기)는 이후에 수정할 수 없죠.
학생들의 이름 순으로 정리된 출석부도 배열이라고 할 수 있습니다. 출석부엔 학생번호(index)가 순서대로 기입되어 있으며, 학생번호(인덱스)를 통해서 특정 학생의 정보를 조회할 수 있습니다.
배열의 선언
// primitive
int[] arr = new int[3];
int arr[] = {1,2,3};
int[] arr = {1,2,3};
// wrapper class
Integer[] arr = new Integer[3];
arr[0] = 1;
Integer arr[] = {1,2,3};
Integer[] arr = {1,2,3};
기본적으로 배열은 데이터형 변수명 = new 자료형[배열의 크기]의 형식으로 new 키워드를 통해 선언합니다.
또는, 변수에 {...}형식의 배열을 직접 할당할 수 있습니다.
메모리 공간에서의 배열
변수에 배열 직접 할당
int[] nums = { 12, 37, 44 };
위와 같이 배열을 선언한다면 메모리 상에서는 아래와 같은 형식으로 저장됩니다.
스택영역에 변수 nums가 할당되며, 이 변수 nums는 정수형 배열타입 객체를 참조합니다. 즉, 배열 객체의 주소를 저장하게 되죠.
힙 영역에서는 {12, 37, 44}배열이 할당되며, 이 배열의 첫 요소의 주소가 배열 객체의 메모리 주소가 됩니다. 나머지 배열 요소들은 연속적으로 저장되게 되죠. 37은 #54214, 44는 #54215 등의 방식입니다.
실제로 위의 코드를 실행하여 변수를 출력하면 해당 변수가 참조하고 있는 배열 객체의 주소가 출력됩니다.
new 연산자를 통한 배열 생성
int[] nums = new int[3];
nums[0] = 12;
nums[1] = 37;
nums[2] = 44;
이처럼 new연산자를 통해 배열을 할당하게 되면, 메모리 상(힙영역)에 초기화된 배열이 생성되게 됩니다. 그 이후에, 인덱스를 통해 데이터를 삽입할 수 있게 되죠. 여기서 주목할 점은 배열이 초기값을 가지며 할당된다는 것입니다.
타입별 배열 초기값
정수형 기본 타입 | byte[] | 0 |
char[] | '\u0000' | |
short[] | 0 | |
int[] | 0 | |
long[] | 0L | |
실수형 기본 타입 | float[] | 0.0F |
double[] | 0.0 | |
논리형 기본 타입 | boolean[] | false |
참조형 기본 타입 | 클래스[] | null |
인터페이스[] | null |
다차원 배열
int mul_arr[][] = { {1,2,3} , {7,8,9} };
int arr3[][][] = {
{
{1,1,1},
{2,2,2}
},
{
{3,3,3}
{4,4,4}
}
};
위와 같이 []의 갯수를 통해서 배열의 차원을 정할 수 있습니다.
위의 코드에서는 mul_arr는 3개의 원소를 가진 배열을 2개 가진 배열이라고 할 수 있죠.
mul_arr[0] = {1,2,3}
mul_arr[1] = {7,8,9}
위의 예시코드에서, arr3의 차원을 색상별로 나누어보면 위와 같이 표현할 수 있습니다.
- 빨강: 3차
- 파랑: 2차
- 초록: 1차
메모리 상의 다차원 배열
위의 다차원 배열을 메모리 상을 시각화 한다면 위와 같습니다. 스택영역에서 3차원 배열 변수가 생성되고, 이 변수는 힙 영역의 2차원 배열을 참조합니다. 힙 영역의 2차원 배열은 2개의 2차원 배열을 다시 참조합니다. 이 2개의 2차원배열의 각 원소는 길이가 3인 1차원 배열들을 각각 참조하는 형식이죠.
배열을 다루기 위한 클래스
Arrays 클래스를 활용한 전체 데이터 출력
import java.util.Arrays;
Arrays.toString(arr); // 배열의 전체 요소를 String형태로 반환
앞의 예시에서 배열 변수를 직접 출력하게 되면 해당 변수가 참조하고 있는 메모리의 주소가 출력되게 됩니다.
배열의 원소를 출력하고 싶다면 Arrays.toString()메소드를 통해 출력해야 합니다.
'Dev > 자료구조' 카테고리의 다른 글
[자료구조/Java] Hash 해시 (0) | 2022.01.21 |
---|---|
[자료구조/Java] LinkedList - 조회/추가/삭제 코드구현 (0) | 2022.01.21 |
[자료구조/Java] Stack (Java구현, 관련 메소드) (0) | 2022.01.02 |
[자료구조/Java] Queue (Java구현, 관련 메소드) (0) | 2021.12.28 |
[자료구조/Java] ArrayList (0) | 2021.12.27 |