본문 바로가기
Java

[Java] 배열(Array)? 배열 선언과 할당, 해쉬코드

by 나는 개발자 2020. 12. 30.
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로 출력된다.

 

댓글