본문 바로가기
프로그래밍/Java

[Java] 배열(array)

by 소꿍 2020. 9. 1.

변수에는 여러 개의 값을 저장할 수 없는데, 이를 위해 여러 개의 변수를 사용하면 데이터 관리가 어려워진다.

배열을 이용하면 하나의 변수(배열)로 여러 데이터를 효율적으로 관리할 수 있다.

 

배열의 특징

  • 같은 데이터형만 저장 가능하다.

  • 기본, 참조 데이터형 모두 저장 가능하다.

  • 배열은 참조 데이터형이므로 반드시 new로 생성하며, 배열 요소값은 자동으로 초기화된다.

    -> 값을 초기화해주지 않으면 String은 null, int는 0으로 자동 초기화됨

  • 생성된 배열의 요소는 배열명[index]로 접근한다.(index는 0부터 시작)
  • 배열의 길이는 배열명.length로 구할 수 있다.

    -> 2차원 배열에서 배열명.length는 행의 크기,

        배열명[행index].length는 지정한 행의 열의 크기를 구해 줌(예: 배열명[i].length는 i행의 열의 크기)

  • 이미 생성된 배열의 크기 변경은 불가능하다.

 


배열 사용방법 1

1) 배열 선언:
데이터형 [] 배열명;

int [] num;
String [] name;

 

 

2) 배열 생성:

배열명 = new 데이터형[크기];

num = new int[3];
name = new String[2];

 

* 선언과 생성 한꺼번에 하는 방법:

데이터형 [] 배열명 = new 데이터형[크기];

int [] num = new int[3];

 

3) 배열 초기화:

배열명[index] = 값;

num[0] = 10;
num[1] = 20;
num[2] = 30;

배열 사용방법 2

리터럴(literal)을 이용한 생성방법으로, 선언, 생성, 초기화를 한번에 작성한다.

* 주의: 초기화를 나중에 할 수 없다.

 

데이터형 [] 배열명 = {값, 값2, 값3};

int [] num = {10, 20, 30};
String [] name = {"홍길동", "이순신"};

배열 사용방법 3 (사용방법1 + 사용방법2)

데이터형 [] 배열명;

배열명 = new 배열명[]{값, 값2, 값3};

int [] num = new int[] {10, 20, 30};
String [] name = new String[] {"홍길동", "이순신"};

2차원 배열 사용방법 1

1) 배열 선언:
데이터형 [][] 배열명;

int [][] num;

데이터형 배열명[][];

String [][] name;

 

2) 배열 생성(행크기, 열크기 모두 지정):

배열명 = new 데이터형[행크기][열크기];

num = new int[3][2];
name = new String[2][2];

 

* 선언과 생성 한꺼번에 하는 방법:

데이터형 [][] 배열명 = new 데이터형[][];

int [][] num = new int[3][2];

 

3) 배열 초기화:

배열명[행index][열index] = 값;

num[0][0] = 10;
num[0][1] = 20;
num[1][0] = 30;
num[1][1] = 40;
num[2][0] = 50;
num[2][1] = 60;

2차원 배열 사용방법 2

1) 배열 선언:

사용방법 1과 동일

 

데이터형 [][] 배열명;

int [][] num;

데이터형 배열명[][];

String [][] name;

 

 

2) 배열 생성 1 (행크기만 지정, 열크기는 나중에 동적으로 지정):

배열명 = new 데이터형[행크기][];

num = new int[3][];

 

* 선언과 생성 한꺼번에 하는 방법:

데이터형 [][] 배열명 = new 데이터형[행크기][];

int [][] num = new int[3][];

 

3) 배열 생성 2 (열크기 지정):

배열명[행index] = new 데이터형[열크기];

num[0] = new int[2];
num[1] = new int[3];

 

4) 배열 초기화:

사용방법 1과 동일

배열명[행index][열index] = 값;

num[0][0] = 10;
num[0][1] = 20;
num[1][0] = 30;
num[1][1] = 40;
num[1][2] = 50;

2차원 배열 사용방법 3

배열 선언, 생성, 초기화를 한꺼번에 작성한다.

* 주의: 초기화를 나중에 할 수 없다.

 

데이터형 [][] 배열명 = { {값, 값2}, {값3}, {값4, 값5} };

int [][] num = {{10, 20}, {30}, {40, 50}};
String [][] name = {{"홍길동", "이순신"}, {"강감찬"}};

2차원 배열 사용방법 4

사용방법 1 + 사용방법 2, 3

 

데이터형 [][] 배열명 = new 데이터형[][]{ {값, 값2}, {값3}, {값4, 값5} };

int [][] num = new int[][]{ {10, 20}, {30}, {40, 50} };

 


Call by Reference

배열은 객체이기 때문에, 배열을 메소드의 파라미터(인자)로 전송하면 객체의 위치값(주소값)이 전송된다.

따라서 넘겨받는 곳(메소드)에서 배열의 요소값을 수정하면 배열의 원래 데이터도 수정된다.

 


배열 복사하기(System.arraycopy())

배열을 생성한 후에는 배열의 크기를 변경할 수 없다.

따라서 배열의 크기를 변경하려면 새로운 배열을 생성한 후, 배열의 데이터를 새로 만든 배열에 복사해 사용해야 한다.

 

System.arraycopy(src, srcPos, dest, destPos, length);

 

* 여기서

src = 복사해 올 배열,

srcPost = 복사 시작할 인덱스,

dest = src를 복사해서 넣을 새 배열,

destPos = dest 배열에서 복사해 넣을 인덱스 시작점,

length = src에서 dest로 복사할 데이터 길이

 

int [] src = {1, 2, 3, 4, 5, 6};
int [] dest = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
System.arraycopy(src, 0, dest, 0, src.length);

 

src[0]부터 src[5]까지의(src.length가 6이므로) 데이터가 dest[0]의 위치부터 복사되어 저장된다.

위의 코드 실행 후 배열 dest값을 찍어보면 {1, 2, 3, 4, 5, 6, 4, 3, 2, 1}이 출력된다.

 

댓글