배열
배열이란, 같은 자료형의 변수를 지정하여 여러 데이터를 저장할 수 있는 저장 공간을 의미한다. 이렇게 여러 데이터를 담을 수 있는 구조를 자료 구조(data structure)라고도 한다. 배열을 사용하면 같은 자료형의 데이터들을 효율적으로 다룰 수 있다.
배열의 선언은
int[] arr = new int[5];
이와 같이 선언해주면 된다. arr는 배열의 이름이고 숫자 5는 배열의 크기를 의미한다.
NULL 키워드
int num; 이라고 변수를 선언 했을 때 해당 변수는 값을 알 수가 없다. 그러면 배열의 경우는 어떻게 할까? 배열을 선언한 후 값을 부여하지 않을 경우 'null' 이라는 키워드가 시스템에서 입력된다. null은 공간이 존재하지 않는다. 혹은 없다 라는 의미를 가진다.
배열의 생성과 선언
배열을 선언한 후에는 배열을 생성해야 한다. 저장할 수 있는 공간을 만들려면 배열을 생성해야 한다. 프로그래밍에서는 무언가를 기억할 때 메모리를 사용하는데, 배열은 데이터를 저장하기 위한 공간이 필요하므로 메모리에 필요한 만큼 공간을 만들도록 선언해야 한다.
int [] arr = new int[크기]; 또는 int arr[] = new int[크기];
자료형을 부여하고 일반 변수와 구별하기 위해 배열의 연산자를 표기한다. 이어서 변수명을 기입한다. 우측에는 new 연산자와 함께 배열의 자료형과 크기를 부여하여 선언한다. 다른 방식으로는 이런 방식이 있다.
int[] arr = {1,2,3,4,5};
혹은
int [] arr;
arr = {1,2,3,4,5}
이와 같이 선언할 수 있다.
int [] arr
arr = new int[] {1,2,3,4,5}
이렇게 배열을 재정의 해서도 배열 선언이 가능하다.
메모리에 지정한 크기만큼의 저장 공간을 생성하고 그 저장 공간이 있는 위치 값을 arr 변수에 대입한다. 배열의 변수는 그 주소 값을 통해서 배열에 접근하여 데이터를 가져오게 된다.
배열의 특징은 다음과 같다.
- 배열 선언 시 크기를 지정한다.
- 배열 선언 후 공간의 크기를 늘리거나 삭제할 수 없다.
- 지정된 자료형의 값만 저장할 수 있다.
배열의 구조
배열을 만든 후에는 값을 넣거나 꺼내야 한다. 배열은 각 공간마다 위치를 알려주는 위치 값이 존재하는데, 우리는 배열이 지니는 값들의 위치를 인덱스(index)라고 부른다. 인덱스는 배열의 공간마다 붙여진 번호로 범위는 1이 아닌 0부터 시작한다.
배열을 생성할 때 대괄호[] 안에 배열의 길이를 작성했는데, 배열을 사용하면서 종종 배열의 길이가 필요할 때가 있다. 배열은 내부적으로 length라는 변수를 지니는데, 해당 변수는 배열의 길이 값을 가지고 있다.
System.out.println("배열의 길이 : " + arr.length);
이를 통해 점(.) 연산자로 연결해 배열의 길이를 확인할 수 있다.
배열의 초기값
| 자료형 | 초기값 |
| 정수형 | 0 |
| 실수형 | 0.0 |
| 문자형 | '' |
| 객체형 | null |
자료형에 따라 배열이 선언될 때, 자동으로 초기화 된다.
배열에 값이 순서 없이 저장되는 경우, 우리는 배열의 값을 오름차순, 또는 내림차순으로 정렬(sort)해야 할 때가 있다. 배열을 정렬하기 위해서는 다양한 알고리즘이 존재하는데, 여러 정렬을 공부하고 진행하면 된다. 다음 사이트에 들어가면 확인이 가능하다.
정렬 알고리즘 7개 정리 (Java)
정렬 알고리즘이란 원소들을 일정한 순서대로 열거하는 알고리즘 이다. 정렬 알고리즘을 사용할 때, 상황에 맞게 다음의 기준들로 사용할 알고리즘을 선정한다. > 시간 복잡도 (소요되는 시간)
velog.io
Arrays
Arrays 클래스는 배열의 복사, 항목 정렬, 항목 검색 등 배열을 다루기 위한 다양한 메서드를 제공한다.
Arrays는 기능을 사용할 때 점(.)을 이용해서 사용할 기능을 호출한다. 먼저 배열 단위로 출력을 도와주는 toString() 기능을 확인해보겠다. toString()은 반복문의 도움 없이 배열을 출력할 수 있으며, 배열의 정의된 값들을 문자열 형태(String)로 변환하여 출력해 준다.
Arryas.sort()는 배열 항목을 쉽게 정렬해주는 역할이다. 배열은 Comparable에 의해 리턴되는 값을 비교하여 오름차순 또는 내림차순으로 배열을 정렬한다.
배열의 복사에는 두가지가 있다.
- 얕은 복사(Swallow copy) : 복사된 배열이나 원본 배열이 변경될 때 서로 간의 값이 함께 변경도니다.
- 깊은 복사(Deep copy) : 복사된 배열이나 원본 배열이 변경될 때 서로 간의 값은 바뀌지 않는다.
얕은 복사는 두 개의 배열이 하나의 공간을 바라본다. 즉, 배열의 주소를 공유함으로써 한족의 배열이 수정되면 다른 한쪽의 배열도 동일하게 수정된다.
깊은 복사는 두 개의 배열이 서로 다른 공간을 가지고 있다. 따라서 한쪽 값을 수정해도 다른 한쪽에도 영향을 주지 않는다.
다차원 배열
지금까지 학습한 배열은 모두 행 하나로 이루어진 1차원 배열이었다. 배열은 여러 가지 구조로 사용할 수 있는데 2차원 이상의 배열을 '다차원 배열'이라고 부른다. 배열은 주로 1차원 또는 2차원 배열에서 사용된다.
2차원 배열의 선언은 다음과 같다.
int[][] arr = new int[크기][크기];
2차원 배열은 보통 행렬 구조로 많이 묘사한다. 실제 수학의 행렬과는 원리가 다르지만, 사용 방식이 동일하기 때문에 주로 행렬 구조를 채용하여 표현한다. 따라서 첫 번째 크기는 행의 개수가 되고, 두 번째 크기는 열의 개수가 지정된다.
int [][] arr = new int[크기][]; // 행의 값을 지정하지 않고 선언
int [][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
이와 같이도 선언이 가능하다. 2차원 배열의 행은 독립된 공간으로 분리되어 있고, 그 행들이 각각 독립된 열을 가지게 된다.
향상된 for문
향상된 for문의 기본 구조는 다음과 같다.
for(int num : score){
}
int는 자료형, num은 변수명, score은 반복 대상이다.
'BOOK' 카테고리의 다른 글
| [JAVA] MENTOR JAVA SECTION 8 (2) | 2025.01.15 |
|---|---|
| [JAVA] MENTOR JAVA SECTION 7 (0) | 2025.01.14 |
| [JAVA] MENTOR JAVA SECTION 5 (0) | 2025.01.06 |
| [JAVA] MENTOR JAVA SECTION 4 (0) | 2025.01.05 |
| [JAVA] MENTOR JAVA SECTION 3 (1) | 2025.01.04 |