728x90
배열이란?
- 동일한 자료형(데이터 타입)의 순차적 자료 구조
- 인덱스 연산자[]를 이용하여 빠른 참조가 가능
- 물리적 위치와 논리적 위치가 동일
- 배열의 순서는 0부터 시작
- 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함.
- int [] arr1 = new int[10];
- int arr2 [] = new int[10];
배열의 길이와 요소의 개수는 동일하지 않습니다.
- 배열을 선언하면 개수만큼 메모리가 할당되지만, 실제 요소(데이터)가 없는 경우도 있음
- length속성은 배열의 개수를 반환해주기 때문에 요소의 개수와 다를 수 있다.
- 동일하지 않을 경우 요소의 개수에 대한 count변수를 따로 넣어야한다.
향상된 for문 사용하기 / for(변수:배열){}
public class CharArrayTest {
public static void main(String[] args) {
char[] alphabets = new char[26];
char ch = 'A';
for(int i=0;i<alphabets.length;i++) {
alphabets[i] = ch++;
}
for(char alpha : alphabets){
System.out.println(alpha+","+(int)alpha);
}
}
}
객체 배열 선언과 구현
- 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만, 객체배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트)메모리만 할당되고(null) 각 요소는 생성하여 저장해야 함.
- 즉, 객체 배열 → 주소를 저장할 방만 잡힘.
객체 배열 복사하기
- **System.arrayCopy(src, srcPos, dest, destPos, length)**자바에서 제공되는 배열 복사 메서드
- System.arraycopy는 byte[]형태의 데이터를 자르거나 연접하기 위해 사용하는 메소드
- System.arraycopy 파라미터는 총 5개가 들어간다.
- src : 배열 원본
- srcPos : 소스 배열을 어디서부터 복사시킬것인지
- dest : 위치시킬 배열
- destPos : 위치시킬 배열의 시작 데이터 위치
- length : 복사되는 배열 요소의 수
//32 byte key (원본) byte[] secretKey = 32 byte byte[]; //16 byte key (첫번째 복사할 대상) byte[] key = new byte[16]; //16 byte IV (두번째 복사할 대상) byte[] iv = new byte[16]; //key.length(16byte) 만큼 원본 데이터를 읽어온 후 key라는 변수에 쓴다 System.arraycopy(secretKet, 0, key, 0, key.length); //(원본, 원본 소스에서 어느부분부터 읽어올지, 복사하려는 대상, 복사 읽어올 부분, 원본에서 복사본까지 얼만큼 읽어 올지) //배열 index 0~15까지 데이터를 key라는 변수에 저장이 되고
- 얕은 복사
- 객체 주소만 복사되어 한쪽 배열의 요소를 수정하면 같이 수정 됨
- 즉, 두 배열이 같은 객체를 가리킴
java.util 패키지에서 제공되는 ArrayList
- 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야했다.
- 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야 함
- ArrayList는 객체 배열을 좀 더 효율적으로 관리하기 위해 자바에서 제공해주는 클래스
- 이미 많은 메서드들이 최적의 알고리즘으로 구현되어 있어 각 메서드의 사용 방법만 익히면 유용하게 사용할 수 있음
import java.util.ArrayList;
import Book;
public class ArrayListTest {
public static void main(String[] args){
ArrayList<Book> library = new ArrayList<Book>();
//add : 요소 하나를 배열에 추가한다.
libraray.add(new Book("태백산맥1","조정래"));
//size: 배열에 추가된 요소 전체 개수를 반환한다.
for(int i = 0; i<library.size(); i++) {
//get(int index) : 배열의 index위치에 있는 요소 값을 반환한다.
library.get(i).showBookInfo();
}
}
}
728x90
'JAVA' 카테고리의 다른 글
업캐스팅과 다운캐스팅 (0) | 2023.03.14 |
---|---|
상속 (0) | 2023.03.14 |
디자인 패턴 (0) | 2023.03.14 |
여러 인스턴스에서 공통으로 사용하는 변수를 선언하자 - static변수 (0) | 2023.03.14 |
객체 자신을 가리키는 this (0) | 2023.03.14 |
댓글