재밌고 어려운 IT를 이해해보자~!

Section 06. 배열 본문

JAVA Book Study

Section 06. 배열

언제나즐거운IT 2023. 12. 17. 18:21

01. 배열

배열이란 같은 자료형의 변수를 지정하여 여러 데이터를 저장할 수 있는 저장 공간을 의미한다.

여러데이터를 담을 수 있는 구조를 자료 구조 라고도 한다.

 

배열의 선언

int[] arr;	자료형[] 변수 이름;
int arr[];	자료형 변수 이름[];

 

null 키워드

int num;

초기화 되지 않은 변수는 메모리가 변수를 기억하기 위해서

불특정 값을 부여하지만프로그램에서 사용될 수 없다.

 

int arr[];

배열의 경우엔 불특정한 값이 아닌 'null'키워드를 부여한다.

null의 의미는 "공간이 존재하지 않는다." or "없다"라는 의미이다. 

배열 변수는 생성되었지만, 아직 그 안에 값을 담을 공간이 생성되지 않았다는 뜻이다.

 

이떄 arr은 Stack영역에 생성되며, 배열 데이터를 저장하기 위한 공간이 필요하므로

Heap 영역에 메모리에 필요한 만큼 new 연산자를 사용해 공간을 만들도록 한다.

heap영역의 공간 주소를 arr에 저장하여 배열 초기화가 완료된다.

int[] arr = new int[크기];

 

배열의 변수는 heap영역의 공간 주소값을 통해서 배열에 접근하여 데이터를 가져오게 된다.

 

02. 배열의 구조

인덱스

배열은 각 공간마다 위치를 알려주는 값이 존재하며 이를 '인덱스'라고 부르며 0부터 시작한다.

 

배열의 길이.

배열은 내부적으로 legnth라는 변수를 지니는데, 해당 변수는 배열의 길이를 가지고있다.

 

배열의 초기값 

배열은 생성가 동시에 데이터 자료형 별로 기본값이 주어진다.

자료형 초기값
정수형 0
실수형 0.0
문자형 ' '
객체형 null

 

03. Arrays 클래스 메서드

배열의 출력

Arrays.toString(arr);

배열변수명으로 그냥 출력하면 주소값이 나오지만 toString을 쓰면 배열에 정의된 값들을 문자열 형태(String)로 변환하여 출력해 준다.

 

배열의 정렬

Arrays.sort(arr);

sort는 Comparable 인터페이스에 의해 리턴되는 값을 비교하여 오름차순으로 배열을 정렬한다.

내림차순의 경우 int타입의 클래스 데이터인 Integer타입 (Wrapper 클래스) 를 사용해야하며, Compartor 인터페이스의 reverseorder()메서드를 사용해야한다.

 

배열의 복사  

얕은 복사 : 복사된 배열이나 원본 배열이 변경될 때 서로 간의 값이 함께 변경된다.  (Call by reference)

깊은 복사 : 복사된 배열이나 원본 배열이 변경될 때 서로 간의 값은 바뀌지 않는다. (Call by value)

 

깊은 복사의 경우 for문을 돌려 값을 하나씩 넣어도 되지만, copyOf 메서드를 사용하면 쉽게 깊은 복사를 할 수 있다.

 

int newArr[] = Arrays.copyof(arr, arr.length);

04 .다차원 배열

2차원 배열 선언

행렬구조로 많이 묘사하며 첫 번쨰 크기는 행의 개수, 두 번쨰 크기는 열의 개수가 된다.

int[][] arr = new int[크기][크기];

 

 

다음처럼 행의 크기만선언후 각각 다른 열의 크기를 부여할 수 있다. 

int[][] arr = new int[3][];
arr[0] = new int[2];
arr[0] = new int[3];
arr[0] = new int[1];

 

2차원 배열 선언시 열의 크기는 지정하지 않아도 되지만, 행의 크기는 꼭 지정해야한다.

각 행들은 독립적인 열을 갖고있어 각행을 출력하면 열의 주소값을 출력한다.

 

05. 향상된 for 문

반복 대상의 요소를 하나씩 변수에 대입하면서 진행하고, 반복 대상의 길이만큼 꺼내어 반복한다.

for (int num : score) {
	실행문;
}

 

'JAVA Book Study' 카테고리의 다른 글

Section 08. 메서드  (0) 2023.12.26
Section 07. 클래스  (0) 2023.12.17
Section 05. 제어문 - 2  (0) 2023.12.17
Section 04. 제어문 - 1  (0) 2023.12.17
Section 03. 연산자  (2) 2023.12.17
Comments