본문 바로가기
JAVA/Java

배열(array) - 자료를 순차적으로 한꺼번에 관리하는 방법

by KkingKkang 2023. 3. 14.

배열이란?

  • 동일한 자료형(데이터 타입)의 순차적 자료 구조
  • 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 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();
		}

	}


}

 

반응형

'JAVA > Java' 카테고리의 다른 글

업캐스팅과 다운캐스팅  (0) 2023.03.14
상속  (0) 2023.03.14
디자인 패턴  (0) 2023.03.14
여러 인스턴스에서 공통으로 사용하는 변수를 선언하자 - static변수  (0) 2023.03.14
객체 자신을 가리키는 this  (0) 2023.03.14

댓글