배열은 무엇이며, 어떻게 사용할까?
배열
--
배열은
같은 타입의 여러 변수들을 하나로 묶어 관리하는 공간이다.
기본적인 배열 생성하기 (값은 할당x)
타입[] 배열이름 = new 타입[배열크기];
// 또는
타입 배열이름[] = new 타입[배열크기];
일반적으로 첫 번째 형식을 많이 사용한다.
int[] arr; // 배열 선언 (아직 생성하지 않아 메모리에 할당되지 않은 단계 / 사용 불가)
arr = new int[5]; // 배열 생성, 배열 크기는 5 (실제 메모리에 할당 / 사용 가능)
// 또는
int[] i = new int[5]; //선언과 동시에 생성
참고
배열을 생성하면 크기 변경이 불가능하다.
변경하고 싶다면 새로 배열을 생성해서 기본 배열의 값을 새로운 배열에 옮겨줘야 한다.
배열 생성 후 값을 할당(초기화) 하기 전에는 타입에 알맞은 기본값으로 설정된다.
- boolean : false
- char : '\u0000'
- byte : 0
- int : 0
- long : 0L
- float : 0.0f
- double : 0.0d 또는 0.0
- 참조형 : null
배열의 각 요소에 접근하기 위해서 "인덱스"라는 번호를 이용하여 각 요소를 구분하고 관리한다.
인덱스는
주로 배열 또는 리스트와 같은 자료구조에서
요소의 위치를 나타내는 숫자를 의미한다.
0부터 배열의 길이에 -1까지 존재한다.
배열이름[인덱스]; //해당 배열의
다양한 배열 초기화 방법
초기화는
일반적으로 처음(최초)에 값을 할당하는 것을 의미한다.
배열처럼 초기에 기본값으로 설정되는 것도 초기화라고 부르지만
그 이후에 개발자가 직접 값을 할당하는 것도 초기화라고 부른다.
개발자가 직접 할당 이후에 또 할당(수정)하는 것은 초기화라고 부르지 않는다.
// 1. 직접 초기화
int[] arr = new int[5];
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
arr[4] = 25;
// 2. 반복문으로 초기화
int[] arr = new int[5];
for(int i = 0; i <= arr.length; i++){
arr[i] = (i + 1) * 5;
}
// 3. 선언과 동시에 초기화 (자동으로 배열크기도 선언됨)
int[] arr = new int[]{5, 10, 15, 20, 25};
// 4. 선언과 동시에 초기화 (new 생략 가능)
int[] arr = {5, 10, 15, 20, 25}; // new 생략 가능 but, 선언과 생성을 따로는 불가능
배열의 다양한 출력 방법
System.out.println(Arrays.toString(arr));
// 배열 arr의 모든 요소(내용)을 대괄호로 묶어서 출력한다.
// [5, 10, 15, 20, 25]
System.out.println(arr);
// 배열은 참조형이기 때문에 주소값을 가지고 있다.
// asdf@1348174
char[] arr = {'a', 'b', 'c'};
System.out.println(arr);
// abc
String은
사실 문자열 자체로 값을 저장하는 것이 아닌 char타입의 배열로 저장된다.
String 클래스는 문자열을 효율적으로 관리하기 위해 char타입의 배열로 저장하는 구조 기반의 클래스다.
그래서 char 배열은 문자열과 유사한 데이터를 저장하는 역할을 하기 때문에
자바는 편의성을 위해 char 배열을 출력할 때 문자열처럼 처리하도록 설계되어 있다.
(println() 메서드는 다양한 입력 유형을 처리할 수 있도록 오버로딩되어 있는데 그중 char 배열은
메모리 주소 대신 문자열처럼 출력되도록 오버로딩 되어 있다.)
String도 참조형인데 왜 주소가 아닌 값을 출력하는가?
String 클래스에 toString() 메서드가 오버라이딩되어 주소가 아닌 값을 출력하도록 설계되어 있다.
--
다차원 배열
--
다차원 배열은
배열 안에 또 다른 배열이 들어있는 구조로
배열 안에 또 다른 배열은 2차원 배열,
배열 안에 또 다른 배열 안에 또 다른 배열은 3차원 배열이라고 부른다.
(그 이상도 가능)
다차원 배열 기본 형식
// 2차원 배열
타입[][] 배열이름 = new 타입[1차 배열 크기][2차 배열 크기];
// 타입[] 배열이름[] 또는 타입 배열이름[][] 이렇게도 작성 가능
// 3차원 배열
타입[][][] 배열이름 = new 타입[1차 배열 크기][2차 배열 크기][3차 배열 크기];
2차원 배열 구조
int[][] arr = new int[4][3];
간단하게는 위 구조처럼 생각하면 설계할 때 편하다.
다만 실제로 메모리에 할당되는 구조는 아래와 같이 단계적으로 참고(주소를 저장)하고 있는 구조다.
2차 배열 초기화 예시
int[][] arr = new int[][]{{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}};
int[][] arr = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}}; //new 생략 가능
// 또는 따로 초기화하기
int[][] arr = new int[4][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 2;
...
--
가변 배열
--
가변 배열은
다차원 배열의 특별한 형태로,
각 행(배열)의 길이(크기)를 각자 다르게 생성할 수 있다.
다차원 배열을 생성할 때 마지막 배열의 크기는 생략하고 나중에 지정할 수 있다.
이를 이용하여 배열 행의 크기를 다르게 지정할 수 있다.
// 동일한 크기로 지정
int[][] arr = new int[5][]; // 나중에 따로 선언 가능
arr[0] = new int[3];
arr[1] = new int[3];
arr[2] = new int[3];
arr[3] = new int[3];
arr[4] = new int[3];
// = int[5][3]와 같은 의미
// 가변 배열
int[][] arr = new int[5][];
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[1];
arr[3] = new int[1];
arr[4] = new int[5];
// 행마다 크기가 같지 않아도 가능하다.
--
'Language > Java' 카테고리의 다른 글
클래스, 객체, 인스턴스 (+ 객체 생성 방법) (2) | 2024.10.12 |
---|---|
배열(Arrays 클래스) 관련 메서드 정리 (0) | 2024.10.11 |
조건문, 반복문 (+ break, continue, label) (0) | 2024.10.06 |
[연산자] 비교, 논리, 그 외의 연산자 (+ instanceof) (0) | 2024.10.05 |
[변수] 변수와 상수 (+ 타입, 진법, 형변환) (0) | 2024.09.22 |