변수는 1개의 데이터만 저장할 수 있다. 때문에 여러 값을 저장하고 싶을 때는 변수도 많아지고 코드가 복잡해지는데 배열은 여러가지 값을 저장할 수 있기 때문에 자주 쓰이고 또 그만큼 중요하다.
1. 배열선언
타입[] 변수;
타입 변수[];
배열 객체를 생성하는 방법에는 값 목록을 이용하거나 new 연산자를 이용하는 방법이 있다.
타입[] 변수 = {값0, 값1, 값2, 값3, ...}
중괄호 안에 값을 작성하면 그 값을 가지고 있는 배열 객체를 힙에 생성하고 배열 객체의 번지를 리턴한다. 배열 변수는 리턴된 변수를 저장하고 참조가 이루어진다.
*주의점
배열 객체를 생성할 때 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.
String[] str;
str = {};
// 에러
때문에 변수를 미리 선언한 후 값을 입력하고 싶을 때는 new 연산자를 이용해야한다.
*예시
String[] str = null;
str = new String[] {};
위 예시처럼 new 연산자를 이용하면 선언 이후에 값을 넣어도 에러가 발생하지 않는다.
타입[] 변수 = new 타입[길이];
new 연산자를 이용해 배열을 만들어 두었을 때 int형이라면 초기값이 0이고 String 배열일 경우는 초기값이 null이다 프로젝트를 진행하면서 배열을 출력했을 때 0이나 null이 나온다면 값을 넣는 과정에서 잘못된 거라 판단하고 코드를 수정하면 될 것 같다.
String[] str;
str = {"자바", "파이썬"}
int num = str.length;
System.out.print(num)
// 출력 결과
2
배열을 list 형식으로 변환해 사용하면 가입한 회원이 몇명인지, 학생 수가 몇명인지 등을 구할 때 사용하면 용이하다.
다차원 배열은 값이 한줄이 아닌 여러줄로 나열되어 입력된다고 생각하면 편할 것 같다. 글로 적기는 어려워서 직접 코드를 작성해 이해했다.
기본적으로 선언 방식은 아래와 같다.
타입[][] 변수 = new 변수[행][열];
불러오는 방법 또한 변수[행][열]로 불러올 수 있다. 아래는 값의 해당 위치를 그대로 표시하는 코드를 작성했다.
public class array {
public static void main(String[] args) {
int n = 3; //배열의 크기를 정할 변수
String [][] str = new String[n][n]; //배열 선언
for (int i = 0; i < n; i++ // 행의 크기 증가
for(int j = 0; j < n; j++){ // 열의 크기 증가
str[i][j] = "["+i+"]["+j+"] ";
}
}
for (int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
System.out.print(str[i][j]);
}
System.out.println();
}
}
}
이렇게 눈으로 보니 좀 알기 편했던 것 같다.
배열 복사란 말 그대로 배열을 복사하는 것이다. 배열 특성상 크기를 늘릴 수가 없는데 이와 같은 경우 크가 큰 배열을 새로 만들어둔 뒤 새로 만든 배열에 이전 배열을 복사해서 넣는 것이다
배열을 복사하는 방법은 크게 두 가지 방법이 있는데 첫 번째로는 단순히 for문으로 인덱스 하나하나 조회해서 집어넣는 방법과 System.arraycopy()를 이용해 복사하는 방법이 있다.
System.out.println("첫번째 배열");
String[] str2 = {"java", "String", "array"}; // 값을 가진 채로 배열 선언
for (int i = 0; i<str2.length; i++){
System.out.print(str2[i]+", "); // 배열 출력
}
System.out.println();
System.out.println("두번재 배열");
String[] newStr2 = new String[5]; // 5개의 값을 넣을 수 있는 배열 선언
for (int i = 0; i<str2.length; i++){
newStr2[i] = str2[i]; // 배열 복사
}
for (int i = 0; i<newStr2.length; i++){
System.out.print(newStr2[i]+", "); // 배열 출력
}
위 처럼 크기가 큰 배열에 복사해서 출력해보니 복사가 잘 되었고 위에서 설명했듯이 값이 들어가있지 않은 자리엔 초기값으로 null이 들어가있는 것도 확인이 되었다.
System.arraycopy( 복사할배열, 0, 복사값을넣을배열, 0, 복사할배열.length );
이 방법도 동일하게 값이 들어가있지 않은 자리엔 null값이 들어간다.