5.0
자바에서는 8개의 기본 자료형 이외의 모든 자료형은 참조 자료형이다. 대표적인 참조 자료형에는 배열 array, 클래스 class, 인터페이스 interface 등이 있다. 참조 자료형은 개발자가 얼마든지 정의 할 수 있으므로 무한개라 할 수 있다. 먼저 배열을 알아보자.
5.1.1 배열이란?
배열은 동일한 자료형을 묶어 저장하는 참조 자료형이다. 생성할 때 크기를 지정해야 하고, 한 번 크기를 지정하면 절대 변경할 수 없는 특징이 있다. 이 2가지 특징은 이후 배열의 선언과 객체 생성에도 적용되므로 반드시 기억하길 바란다.
5.1.2 배열 생성하기
1단계 배열 선언하기
배열을 선언할 때는 다음과 같이 2가지 방법으로 선언할 수 있다. 배열을 나타내는 대괄호 []는 자료형 뒤에 올 수 있고 변수명 뒤에도 올 수 있다.
🥨1차원 배열의 선언 방법
여기서 1가지 의문이 생긴다. 정수 자료형을 int라는 이름으로 만들었고, 실수 자료형을 double이라는 이름으로 만든 것처럼 배열 자료형도 array 정도의 이름으로 만들면 편할 텐데 왜 '자료형[]'형식을 사용하는 것일까? 여기서 배열의 첫 번째 특징을 알 수 있다. 배열은 동일한 자료형만 묶을 수 있는 자료형인데 만일 array a 와 같이 만들면 이 배열이 어떤 자료형을 묶은 것인지 알 길이 없다. 그래서 int[] a, String[] b와 같이 선언해 배열 자료형을 보자마자 어떤 타입을 묶은 것인지 알 수 있도록 하는 것이다.
int[] a; // int 자료형만 저장 가능
double[] a; // double 자료형만 저장 가능
Sytring[] a; // String 자료형만 저장 가능
배열을 선언하면 스택 메모리에 변수의 공간만 생성하고 공간 안은 비운채로 둔다. 아직 배열의 실제 데이터인 객체를 생성하지 않았기 때문이다. 스택 메모리에 위치하고 있는 참조 자료형 변수의 빈 공간을 초기화 할 때는 null(널) 값을 사용할 수 있다. null 값은 힙 메모리의 위치(번지)를 가리키고 있지 않다는 의미다. 즉, 연결된 실제 데이터가 없다는 것을 의미한다.
+) 자바의 메모리 구조
자바의 메모리 구조는 다음과 같이 3개의 영역으로 구성돼 있다.
첫 번째 영역에는 클래스와 메서드가 위치하고 있으며, 스택 영역은 기본 자료형이든 참조 자료형이든 상관 없이 모든 지역 변수가 위치하는 영역이다. 마지막으로 힙 영역은 객체가 위치하는 공간이며 객체는 참조 자료형 변수가 가리키는 실제 데이터쯤으로 생각하면 된다.
2단계 힙 메모리에 배열의 객체 생성하기
모든 참조 자료형의 실제 데이터(객체)는 힙 메모리에 생성된다. 힙 메모리에 객체를 생성하기 위해서는 new 키워드를 사용해야 한다.
🥨배열의 객체 생성
new 자료형 [배열의 길이]
예시
new int[3] / new String[5]
배열의 객체 생성 과정에서 배열의 두 번째 특징을 알 수 있다. 배열을 생성할 때 new int[3] 또는 new String[10]과 같이 배열의 길이를 반드시 지정해야 한다는 것이다. 예를 들어 배열의 길이를 지정하지 않고 new int[]와 같이 명령하면 오류가 발생한다.
new int[3]; // 정수 자료형 3개를 포함할 수 있는 배열 객체 생성
new double[5]; // 실수 자료형 5개를 포함할 수 있는 배열 객체 생성
new String[10]; // 문자열 자료형 10개를 포함할 수 있는 배열 객체 생성
new int[]; // 객체의 크기를 지정하지 않아 오류 발생