✍Array(배열)
- 같은 자료형의 변수를 하나의 묶음으로 다루는 것을 의미한다.
- 묶여진 변수는 하나의 배열명으로 부른다.
- index를 통해 묶어둔 변수를 구분한다. (index 번호는 0부터 시작한다.)
참고)
1) 다른 자료형들이 묶인건 구조체로 c++에서 사용하고 자바에서는 사용하지 않는다.
1. 배열 선언
int[] arr1;
int arr2[];
- 자료형[] 배열명; => [ ]가 어디 붙어도 상관없지만 주로 이걸 쓴다.
- 자료형 배열명[];
- [ ] : 배열 기호
Stack 메모리 영역에 int[] 자료형 변수 arr1을 선언.
2. 배열 할당
int[] arr1 = new int[3];
자료형[] 배열명 = new 자료형[배열크기];
: new int[3] 구문을 통해 할당된 메모리 공간의 주소를 arr1 변수에 대입한다.
🔎 new int[3]; 분석
1) new 연산자
- Heap 메모리 영역에 새로운 공간(배열, 객체)를 할당 하겠다. (할당 == 확보)
2) int[3]
- int 자료형 변수 3개가 묶여있는 int[] 배열
1) + 2) : Heap 메모리 영역에 int 자료형 변수 3개 묶여있는 int[]을 새롭게 할당.
➡ 할당한 위치의 주소가 생긴다.
3) 해석 순서 + 그림 추가
stack에 생성된 arr변수를
new를 통해 int[3]짜리 배열 자료형 영역을 heap에 할당하겠다
heap에 저장된 int[3]안의 각자료형은 int자료형(그림참고)
그리고 그 자료형들은 Index를 이용하여 배열의 각 변수를 구분한다.
기본 자료형(byte, int,char, float, double,long,boolean)
: stack에 바로 값을 저장한다.
참조형 변수:(기본자료형이 아닌 나머지)
값이 아닌 주소를 저장하는 변수
Heap영역에 할당 된 공간은 비어있을 수 없다
=> 컴파일러에 읫해서 해당 자료형의 기본값으로 자동 초기화 된다.
컴퓨터에서 연산은 같은 자료형끼리만 가능하다. 으로 만들어진 배열의
- int[] arr1 의 자료형 : int[]
- new int[3]의 자료형 : int[]
- ➡ 둘의 자료형이 같으므로 대입 연산(=)이 가능하다.
- 실제로 대입되는 값은 new int[3]의 시작주소
- = (대입연산) : 같은 자료형만 연산
참고) int 변수는 바로 대입하면 되지만 int[]자료형은 값은 Heap에 필요한 만큼 stack과 연결
🔎 Array(배열)을 Stack과 Heap에 저장하는이유
- Stack: 메소드 실행 순서 +메소드 안에서 사용되는 지역변수 와 관련있는 곳
- Heap : 임시공간 같은 곳으로, 프로그램 수행 시 필요한 배열, 객체의 생성, 소멸을 반복하는 메모리
참고)
1) 기존에 만들었던 자료형 변수(int 등)은 stack에 저장되고 배열은 heap에 저장된다.
2) 필요에 따라 만들고 삭제하는 곳으로 JVM의 G.C(garbage collector)가 존재해 불필요한 메모리를 정리해준다.
3. 배열 초기화
arr1[0] = 1;
arr1[1] = 100;
arr1[2] = 9000;
: arr1이 참조하는 배열의 0번 인덱스에 정수형 1을 대입한다.
❗ 주의
arr1 = 1;
arr1의 자료형은 int[]이고 1의 자료형은 int이므로 대입할 수 없다.
4. 배열 사용
System.out.println("arr1[0] : " + arr1[0]);
System.out.println("arr1[1] : " + arr1[1]);
System.out.println("arr1[2] : " + arr1[2]);
❗ 주의
- System.out.println("arr1[3] : " + arr1[3]);
➡ 위에서 arr1[3]으로 할당했기때문에 arr1 변수가 참조하는 배열에는 0,1,2인덱스까지만 있고 3번 인덱스가 없다.
❗ error
java.lang.ArrayIndexOutOfBoundsException: 3
-> 주의 구문대로 출력하게되면 발생하는 에러로 배열 인덱스 범위 초과했다는 의미이다.
5. 배열 + for문 같이 사용
for(int i = 0; i <= 2; i++) {
System.out.println(arr1[i]);
}
: i값이 0, 1, 2로 변하기때문에 for문에서 i == index
출력할때 숫자 대신 i를 넣어도 된다.
예제 edu.kh.array.ex.service
'Backend > Java' 카테고리의 다른 글
[Java] Array(배열)_3 (배열 복사) (0) | 2021.09.03 |
---|---|
[Java] 2차원 Array(배열) + 가변 배열/ 선언,할당,초기화 (0) | 2021.09.02 |
[Java] Array(배열)_String[] (null) (0) | 2021.09.02 |
[Java] Array(배열)_2 (초기화, Arrays 클래스, Arrays.toString) (0) | 2021.09.01 |
[Java] Operator(연산자) 종류 (0) | 2021.08.26 |