1. 배열(array)
- 자료가 연속으로 나열된 구조.
- 배열요소 : 배열을 이루는 각각의 자료. 배열 요소는 자료형(객체도 가능)이 모두같음.
- 배열을 선언하면 선언한 자료형과 배열 길이에 따라 메모리가 할당됨.
- length 속성 : 배열 길이를 나타냄. 처음에 선언한 배열의 전체 요소 개수.
자료형[] 배열이름 = new 자료형[개수];
자료형 배열이름[] = new 자료형[개수];
int[] studentIDs = new int[10]; //int형 요소가 10개인 배열 선언
studentIDs.length //10
2. 배열 초기화
- 배열의 선언과 동시에 각 요소의 값이 초기화됨.
- 정수는 0 , 실수는 0.0, 객체배열은 null 또는 특정값으로 초기화 가능.
int studentIDs = {102, 102, 103}; //선언과 동시에 특정값으로 초기화
int[] studentIDs;
studentIDs = new int[] {101, 102, 103}; //new int[] 생략 불가
3. 인덱스 연산자 []
- 인덱스 연산 : 배열 이름에 []를 사용하는것. 배열 요소가 저장된 메모리 위치를 찾아주는 역할.
- [i] 인덱스 연산을 하면 i번째 요소의 위치를 찾아 해당 위치의 메모리에 값을 넣거나 이미 저장되어있는 값을 가져와서 사용가능.
- 배열의 물리적 위치(메모리에 실제 저장되는 곳) 와 논리적 위치(이론상 배열 위치)는 같음
- 배열길이(배열 전체 요소 개수)가 n이면 배열 순서는 0부터 n-1번까지.
- [0]을 배열의 첫번째 요소라고함.
4. 배열 복사
- 사용 이유
: 기존 배열과 자료형 및 배열 크기가 똑같은 배열을 새로 만들 때
: 모든 요소에 자료가 꽉 차서 더 큰 배열을 만들어 기존 배열에 저장된 자료를 가져오려 할 때
- 방법
(1) 기존 배열과 같은길이 혹은 더 긴 배열을 만들어 for문으로 반복해서 복사.
(2) System.arraycopy(src, srcPos, dest, destPos, length) 메서드 사용.
: System.arraycopy(복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)
- 객체 배열 복사
(1) 얕은 복사(shallow copy)
: 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소값이므로
객체 배열을 복사할때 인스턴스를 따로 생성하는 게 아니라 기존 인스턴스의 주소값만 복사함.
결국 두 배열의 서로 다른 요소가 같은 인스턴스를 가르키고 있으므로,
복사되는 배열의 인스턴스값이 변경되면 두 배열 모두 영향을 받음.
public static voide main(String[] args){
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
/*bookArray1
* 태백산맥, 조정래
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
/*bookArray2
* 태백산맥, 조정래
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
bookArray1[0].setBookName("나무");
bookArray1[0].setAutor("박완서");
/*bookArray1
* 나무, 박완서
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
/*bookArray2
* 나무, 박완서
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
}
(2) 깊은 복사(deep copy)
- 얕은 복사와 다르게 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 그 값을 복사해야함.
public static void main(String[] args){
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
bookArray2[0] = new Book(); //디폴트 생성자로 bookArray2 배열 인스턴스 생성
bookArray2[1] = new Book();
bookArray2[2] = new Book();
for(int i = 0; i < bookArray1.length; i++){
bookArray2[i].setBookName(bookArray1[i].getBookName());
bookArray2[i].setAuthor(bookArray1[i].getAuthor());
}
/*bookArray1
* 태백산맥, 조정래
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
/*bookArray2
* 태백산맥, 조정래
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
bookArray1[0].setBookName("나무");
bookArray1[0].setAutor("박완서");
/*bookArray1
* 나무, 박완서
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
/*bookArray2
* 태백산맥, 조정래
* 데미안, 헤르만 헤세
* 어떻게 살 것인가, 유시민
*/
}
5. 향상된 for문
for(변수:배열){
반복 실행문;
}
public static void main(String[] args){
String[] strArray = {"Java", "Android", "C", "JavaScript", "Python"};
for(String lang : strAarray){
System.out.println(lang);
}
}
6. 다차원 배열
- 이차원 이상으로 구현한 배열.
- 평면이나 공간 개념을 구현하는데 사용.
//자료형[][] 배열이름 = new 자료형[행 개수][열 개수]
int[][] arr = new int[2][3];
int[][] arr2 = {{1,2,3},{4,5,6}};
| arr2[x][0] | arr2[x][1] | arr2[x][2] | |
| arr2[0][x] | 1 | 2 | 3 |
| arr2[1][x] | 4 | 5 | 6 |
7. ArrayList 클래스
- java.util 패키지에 구현되어있는 클래스. (import java.util.ArrayList;)
- 객체 배열을 관리할 수 있는 멤버변수와 메서드를 제공.
- 배열의 길이와 상관없이 객체를 추가할 수 있음.
- 어떤 요소값이 제거되면 그 다음 요소값을 하나씩 앞으로 이동하는 코드도 이미 구현되어있음.
//ArrayList<E> 배열이름 = new ArrayList<E>();
ArrayList<Book> library = new ArrayList<Book>();
| 메서드 | 설명 | |
| boolean add(E e) | 요소 하나를 배열에 추가. E는 요소의 자료형 의미. | library.add(new Book("A", "B")); |
| int size() | 배열에 추가된 요소 전체 개수를 반환. 유효한값 개수. | library.size(); |
| E get(int index) | 배열의 index 위치에 있는 요소 값 반환 | library.get(0); |
| E remove(int index) | 배열의 index 위치에 있는 요소값을 제거하고 그 값을 반환 | library.remove(0); |
| boolean isEmpty() | 배열이 비어있는지 확인 | library.isEmpty(); |
References
DO it! 자바 프로그래밍 입문, 이지스퍼블리싱
'Java' 카테고리의 다른 글
| [Java] 07. 다형성 (0) | 2020.12.13 |
|---|---|
| [Java] 06. 상속 (0) | 2020.12.08 |
| [Java] 04. 클래스와 객체 (1) | 2020.12.06 |
| [Java] 03. 조건문 / 반복문 (0) | 2020.12.04 |
| [Java] 02. 자바의 연산자 (0) | 2020.12.04 |