라봉이의 개발 블로그

java의 정석 5강. 배열 본문

Java/Java의 정석 읽고 정리

java의 정석 5강. 배열

Labhong 2018. 5. 27. 18:35
반응형

배열은 c++과 유사한 점이 많으니 특징과 다른 점만 짚고 넘어가도록 하겠다.



1.1 배열의 생성


배열을 생성하기 위해서는 연산자 new와 함께 배열의 타입크기지정해 주어야 한다.

int[] data;
data = new int[5];



1.2 배열의 초기화


배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화된다.

int[] data = new int[5];
System.out.println(data[0]);    // 0


변수의 타입에 따른 기본값은 다음과 같다.


 자료형

기본값 

 boolean

false 

char 

'\u0000' 

byte 

short 

int 

long 

0L

float 

0.0f 

 double

0.0 or 0.0d 

참조형 변수 

null 


배열을 초기화 하는데 두 가지 방법을 제공한다.

int[] data = {100, 90, 80, 70};            // 1번
int[] data = new int[]{100, 90, 80, 70}    // 2번


두 문장이 같은 결과를 낼 때도 있지만 경우에 따라 2번과 같은 초기화가 필요하다.


아래의 코드에서 볼 수 있듯이 선언과 초기화를 따로 해야하는 경우에는 반드시 2번 방식으로 배열을 초기화해야 한다.

int[] data;
data = {100, 90, 80, 70};             // 오류 발생!!

int[] data2;
data2 = new int[4]{100, 90, 80, 70};  // okay!!



1.3 다차원 배열


2차원 배열의 선언방법은 다음과 같다.

int[][] data;


1차원 배열에서와 같이 중괄호{}를 이용해서 2차원 배열의 생성과 초기화를 동시에 할 수도 있다.

int[][] data = new int [][] {
  {100, 100, 100},
  {20, 20, 20},
  {50, 50, 50},
  {60, 30, 80},
  {50, 40, 50}
};                  // int[][] data = new int[5][3];으로 생성된다.



1.4 배열의 복사


배열은 한번 생성하면 그 크기를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다 큰 배열로 새로 만들고 이전 배열로부터 내용을 복사해야한다.


배열을 복사하기 위해 for문을 돌리거나 System 클래스의 arraycopy를 사용하면 된다.

for문은 대충 알 것이고 arraycopy는 다음과 같이 사용하면 된다.

int[] number = {1, 2, 3, 4, 5};
int[] newNumber = new int[10];

// src: 복사할 원본 배열, dst: 복사할 배열, pos: 복사를 시작할 위치, length: src의 복사 길이
// arraycopy(src, src.pos, dst, dst.pos, length)
System.arraycopy(number, 0, newNumber, 0, number.length);

// => number[0]에서 number.length 개의 데이터를  newNumber[0]부터 복사


반응형
Comments