TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.
배열(Array)
같은 자료형의 변수 여러 개를 하나의 묶음으로 만들어 하나의 이름으로 다루는 것을 배열이라고 한다.
연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입으로서,
변수는 자료형의 값 "하나"만을 담을 수 있는 값이라면, 배열은 같은 자료형의 변수 "여러 개"를 담아 그룹핑하는 값이라고 생각하면 쉽다.
변수는 각 방마다 인덱스가 지정된다.
ex. int [ ] a = new int [5] ; ===> [0], [1], [2], [3], [4]
1. 배열 선언
(두 가지 방식으로 선언이 가능하다)
자료형 배열명 [ ] ;
자료형 [ ] 배열명 ;
ex.
int arr [ ] ;
int [ ] arr ;
-> int a ; == 변수 선언, [ ]가 없으면 배열 선언이 아니다.
2. 배열 할당
(이 배열에 몇 개의 값들을 보관할 건지 크기를 지정하는 과정 == 그 개수만큼 방이 만들어진다.)
배열명 = new 자료형 [ ] ;
ex.
arr = new int [ 5 ] ;
1+2. 배열 선언과 동시에 할당
int [ ] arr = new int [ 5 ] ;
배열이 없다면?
ex. 변수만을 가지고 프로그래밍을 하게 될 때:
// 0, 1, 2, 3, 4, 데이터를 기록하기 위해선
int num1 = 0;
int num2 = 1;
int num3 = 2;
int num4 = 3;
int num5 = 4;
출력할 때? 하나하나씩 출력
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(num5);
변수만을 가지고 데이터를 기록하고 출력을 하게 되면, 반복문을 사용할 수 없게 된다.
그 이유는 변수의 이름이 다 다르기 때문에, num + i 라는 식으로 표현을 해줄 수 없게 된다.
배열을 사용하면?
배열의 가장 큰 장점이라고 한다면, 반복문을 활용할 수 있다.
ex. 반복문으로 값 대입 후 출력
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[4] = 4;
로 하나하나 입력해줄 수 있지만, 반복문을 사용할 수 있다.
for ( int i=0; i<arr.length ; i++) {
arr [ i ] = i ;
}
for ( int i=0; i<arr.length ; i++) {
System.out.println ( arr [ i ] ) ;
}
i < arr.length 를 조건식에 사용한 이유?
인덱스의 숫자는 0부터 시작하기 때문에 (마지막 인덱스 번호 == (배열의 크기 - 1) )
다시 new(할당) 이 되면 이전의 배열값은 사라지게 된다. 각 인덱스의 값도 다시 0으로 초기화된다.
기존의 배열값은 새로운 배열로 할당됨과 동시에 stack에 있는 참조형과 연결이 끊어지게 되고, 메모리 안에 남아있던 값은 자동으로 삭제된다.
--> 이것이 자바의 특징 중 하나인 자동 메모리 관리(Garbage Collection)이다.
stack영역에는 배열의 주소값만 저장되어있기 때문에
배열을 그대로 출력하면, 각 배열마다 할당받은 주소 값이 그대로 출력된다.
예를 들어 [I@6d06d69c 식으로 출력이 되는데, 이 주소를 해쉬 코드를 사용해서 십진수로 바꿔줄 수 있다.
배열명.hashCode( ) ;
해쉬 코드를 사용하면, 위의 주소는 1829164700로 출력된다.
'Java' 카테고리의 다른 글
[Java] 이차원 배열/다차원 배열(Dimensional Array) 그리고 가변배열 (0) | 2021.01.04 |
---|---|
[Java] 배열의 복사? Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사) (0) | 2020.12.31 |
[Java] 메모리 저장공간(stack과 heap)알아보기 (0) | 2020.12.29 |
[Java] 제어문3_분기문? break;와 continue; 그리고 return; (0) | 2020.12.29 |
[Java] 제어문2_반복문(while); while문과 do-while문 (0) | 2020.12.29 |
댓글