배열

이한수·2022년 2월 27일
0

JAVA

목록 보기
3/9

공부 내용 정리목적입니다.

1.배열이란?

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라고 한다.

2. 배열의 특징

  • 변수와 달리 배열은 각 저장공간이 연속적으로 배치되어 있다.
  • 한번 선언된 크기에서 변경이 불가능하다.
  • 배열의 변수이름은 스택영역에 생성 , 값을 갖는 배열은 힙영역에 생성된다.

3.배열 생성

1)배열의 선언

  • 타입[ ] 변수이름 -> ex) int [ ] array;

  • 타입 변수이름 [ ] -> ex) int array[ ];

여기서 변수 이름은 값을 저장하기 위한 공간이 아닌 생성된 배열을 참조하기 위한 참조 변수이다.

2)배열 생성

  • ex) int [ ] array = new int [길이];

    >내부적으로 값이 초기화 된것은 아니므로 기본값들로 지정 되어있다.
  • ex) int [ ] array = new int[ ] {10,20,30,40,50};

    > 배열을 생성함과 동시에 값을 초기화 시킬 수 있다.
  • ex)int [ ] array = {10,20,30,40,50};

    >new int[ ]를 생략하고 값을 초기화 할 수 있다. 
  • ex) int [ ] array;
    array = new int [] {10,20,30,40,50};
    > 미리 선언을 해놓은 참조 변수에 배열을 생성할 시에는 new int[]를 
    생략하고 값을 초기화 시키지 못한다.

3)배열의 기본값

  • 배열은 생성만 형태에서는 값이 담겨 있지 않고 각 선언된 자료형에 따라 기본값으로 초기화 된다.
    표를 참고.

4.인덱스

-생성된 배열의 각 저장공간을 배열의 요소라고 하며
'변수이름[인덱스]' 의 형태로 배열의 요소에 접근할 수 있다.
쉽게 말해 인덱스는 배열의 요소마다 붙여진 일련번호라고 볼 수 있다.

또한 , 0부터 시작하여 배열의 길이-1값이 배열의 끝요소를 가리키는 인덱스 번호이다.
만일, 범위를 넘어서는 인덱스번호를 이용하여 참조할 시 , ArrayIndexOutOfBoundException 이 발생하므로 주의하자.

배열의 길이
-배열이름.length() 로 값을 얻어올 수 있다.
for문을 이용하여 값을 조회하거나 초기화 시킬때 용이하게 사용할 수 있다.
단, 초기화 시에는 반복문을 이용하는 것이다보니 일정한 패턴이 있는 경우로 한정한다.

ex) 배열의 내용을 출력하는 경우

for(int i =0 ; i<= array.length ; i++){
	System.out.print(array[i] + " ");		
}

참고 : 더 간단하게 진행하려면 Arrays.toString(배열이름); 을 이용하면 된다.
출력 형태는 '[첫번째 요소 , 두번째 요소 , 세번째 요소 .......]' 의 형식의 하나의 문자열로 만들어 반환되어진다.

주의 : println 메소드를 이용하여 출력할 때,
배열의 이름은 참조변수 이므로 배열이름을 그대로 출력하면 '배열타입@주소'의 형태를 가진다.
하지만 char배열의 경우 내부 요소의 값들이 구분자 없이 그대로 출력된다.

ex)char [] chArray = {' l ' , ' e ', ' e ' , ' h ' , ' a ' };
System.out.println(chArray); --> leeha

5.배열의 복사

-배열은 한번 생성하면 길이를 변경하지 못한다.
고로 기존의 배열을 초과하는 데이터를 담고자 한다면 새로운 배열을 생성하여 기존 배열의 값을 복사하여 담는 작업을 해야 한다.

복사 하는 방식에는 for문을 이용하거나 , System.arraycopy() 메소드를 이용하는 방식이 있다.
( arraycopy( array , 0 , array2 , 0 , 5) ; --> array[0]에서 시작하여 5개의 요소를 array2[0]부터 차례대로 복사하겠다는 의미)

for문보다는 arraycopy()를 이용하는 것이 더 효율적이라고 한다.

왜?
for문은 배열의 요소 하나하나에 접근하여 복사하는 형태지만, arraycopy()메소드는 지정된 범위의 값들을
통째로 복사하기 때문이다. 이게 가능한 이유는 배열은 연속적이라는 특성 때문이다.

하지만 어찌되었든 이러한 작업들은 비용이 많이 들기 때문에 처음부터 배열 길이를 적당히 넉넉하게 잡아줘서
이런상황에 대해 미리 방지를 해야 한다.
그렇다고 너무 크게 잡으면 사용하지도 않는데 메모리를 차지하게 되므로 , 보통 사용하고자 하는 길이의 2배를 잡는것이
적당하다고 한다.

profile
성실하게

0개의 댓글