배열을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.
자료형[] 배열이름 = new 자료형[개수];
자료형 배열이름[] = new 자료형[개수];
이렇게 배열을 선언할 수 있고, 배열을 이루는 각각의 자료를 배열 요소라고 한다.
배열 요소는 자료형이 모두 같고, 배열 요소 개수만큼 [ ] 안에 적는다.
int[] studentIDs = new int[10];
위 코드는 int형 요소가 10개인 배열을 선언한 것이고,
배열을 선언하면 자료형과 배열 길이에 따라 메모리가 할당된다.
위 코드는 int형이므로 배열 요소를 저장할 수 있는 공간의 크기는 모두 4바이트가 되고, 공간이 10개이므로 총 40바이트의 메모리가 연속적으로 할당되는 것이다.
자바에서는 배열을 선언하면 그와 동시에 각 요소의 값이 초기화된다.
배열의 자료형에 따라 정수는 0, 실수는 0.0, 객체 배열은 null로 초기화된다.
int[] studentIDs = new int[] {101,102,103}; //개수는 생략함
위 코드처럼 선언과 동시에 특정값으로 초기화할 수도 있다.
int[] studentIDs = new int[3] {101,102,103}; //오류 발생
위 코드처럼 선언과 동시에 초기화할 때 [ ] 안에 개수를 쓰면 오류가 발생한다.
int[] studentIDs = {101,102,103}; //int형 요소가 3개인 배열 생성
new int[] 부분을 생략할 수도 있다.
int[] studentIDs;
studentIDs = new int[] {101,102,103};
위 코드와 같이 배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new int[] 생략할 수 없다.
[]는 배열을 처음 선언할 때 사용한 연산자인데, 배열 이름에 [ ]를 사용하는 것은 인덱스 연산이라고 한다.
인덱스 연산자의 기능은 배열 요소가 저장된 메모리 위치를 찾아 주는 역할을 하고, 변수 이름으로 변수가 저장된 메모리 위치를 찾는 것처럼 배열에서 [i] 인덱스 연산을 하면 i번째 요소의 위치를 찾아 해당 위치의 메모리에 값을 넣거나 이미 저장된 값을 가져와서 사용할 수가 있다.
int[] num = new int[10];
num[3] = 25;
위 코드는 num 배열의 4번째 요소에 값 25를 저장한다는 뜻이다. // 배열의 첫번째 요소 인덱스는 0이다.
public class ArrayTest {
public static void main(String[] args) {
int [] num = new int[] {1,2,3,4,5,6,7,8,9,10};
for(int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
위 코드를 실행해보면 출력 화면에 1,2,3,4,5,6,7,8,9,10 이 나오는 것을 확인할 수 있다.
package array;
public class Book {
private String bookName;
private String author;
///////////////////생성자/////////////////////////////////////////////
public Book() {}
public Book(String bookName, String author)
{
this.bookName = bookName;
this.author = author;
}
///////////////////////////////////////////////////////////////////////
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public void showBookInfo()
{
System.out.println(bookName + ", " + author);
}
}
Book 클래스는 책 이름과 저자를 멤버 변수로 가지는 클래스이다. 디폴트 생성자 외에 책이름, 저자를 매개변수로 받는 생성자를 구현했고, get() set() 메서드와 showBookInfo() 메서드도 구현했다.
package array;
public class BookArray {
public static void main(String[] args) {
Book[] library = new Book[5]; // 객체(자료형이 클래스 Book) 배열 5개 만듬
library[0] = new Book("태백산맥", "조정래"); // 객체 생성해 줄 때는 new 생성자
library[1] = new Book("데미안", "헤르만 헤세");
library[2] = new Book("어떻게 살 것인가", "유시민");
library[3] = new Book("토지", "박경리");
library[4] = new Book("어린왕자", "생택쥐패리");
for (int i = 0 ; i < library.length; i++)
{
library[i].showBookInfo();
}
for (int i = 0 ; i < library.length ; i ++)
{
System.out.println(library[i]); // 각 배열 요소가 가지고 있는 인스턴스 주소값
}
}
}
BookArray 클래스에서
Book[] library = new Book[5]; 코드는 Book 인스턴스 4개가 바로 생성되는 것은 아니라,
Book 인스턴스 주소값을 담을 공간 5개를 생성하는 문장이다.
이 문장을 실행하면 Book 주소 값을 담을 공간 5개가 만들어지고 자동으로 각 공간은 null 값으로 초기화된다.
그리고 배열의 각 요소에 Book 인스턴스를 만들어 직접 저장했다.
'자바 기초' 카테고리의 다른 글
자바 다차원배열 - Do it! 자바프로그래밍기초 (0) | 2022.07.20 |
---|---|
자바 배열 복사, arraycopy - Do it! 자바프로그래밍기초 (0) | 2022.07.20 |
자바 static 변수, 클래스 변수- Do it! 자바프로그래밍기초 (0) | 2022.07.19 |
자바 객체 간 협력 - Do it! 자바프로그래밍기초 (0) | 2022.07.19 |
자바 접근제어자, public, private - Do it ! 자바프로그래밍기초 (0) | 2022.07.19 |