Java 15. Array

업데이트:
2 분 소요

Array

1.배열(Array)이란 ?

  • 자료를 순차적으로 한꺼번에 관리하는 방법
  • 동일한 자료형의 순차적 자료 구조(Data Structure)
  • 인덱스 연산자 []를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작
  • 많은 데이터 양을 다룰 때 유용하며, 컬렉션 프레임워크의 기초가 됨.

2.배열 선언과 초기화

1)배열 선언하기

  • 1차원 배열 ( 타입이 같은 둘 이상의 데이터를 저장할수 있는 1차원 구조의 메모리 공간 )
   * 자료형[] 변수이름 = new 자료형[개수] 
     자료형 변수이름[] = new 자료형[개수]  
       - int[] arr1 = new int[10];
         int arr1[] = new int[10];

2)배열 초기화 하기

  • 배열은 선언과 동시에 자료형에 따라 초기화됨(정수는 0,실수는 0.0,객체는 null)
  • 필요에 따라 초기값을 지정할 수 있음.
     int[] numbers = new int[] {10, 20, 30};        // 개수 생략 해야 함 
     int[] numbers = {10, 20, 30};                  // new int[] 생략 가능

     int[] ids; 
     ids = new int[] {10, 20, 30};      // 선언후 배열 생성 new int[] 생략 불가

3)배열 사용하기

  • [] 인덱스 연산자 활용 – 메모리 위치를 연산하여 찾아줌
  • 배열의 길이와 요소의 개수는 동일하지 않음.
   - 배열 선언 시 개수만큼 메모리가 할당되지만,실제요소(데이터)가 없는 경우도있음.
  • length 속성 : 배열의 개수 반환

3.향상된 for문 사용하기

  • 배열의 n개 요소를 0부터 n-1까지 순차적 순회할때 간단하게 사용할 수 있음
    for(변수 : 배열){
            }
public class CharArray {

	public static void main(String[] args) {
		
		char[] alphabet =new char[26];
		char ch = 'A';
		
		for(int i=0;i<alphabet.length;i++) {
			alphabet[i] = ch++;
			
		}
		for(char alpha : alphabet) {
			System.out.println(alpha+", "+(int)alpha);
		}
	}

}

4.다차원 배열

  • 2차원, 3차원 배열 등.
  • []의 개수가 차원의 수를 의미함.
  • 선언방법
        타입[][] 배열이름;
        타입 변수이름[][];
        타입[] 변수이름[];
  • 배열 초기화
        int[][] array = new int[5][5];
        int[][] array2 = new int[][] { {},{} };
  • 가변 배열 (열이 서로 다른 배열)
public class TwoDArray {

	public static void main(String[] args) {
		
		//[][]대괄호의 갯수가 곧 차원을 의미함.
		int[][] score = new int[][] {
			{100,100,100},
			{50 ,50 ,50 },
			{10 ,20 ,30 },
			{60 ,20 ,40 }
		};
		// 2차원 배열의 값 읽고 쓰기 위해서는 더블루프가 반드시 필요함
		for(int i=0; i<score.length;i++) {
			for(int j=0; j<score[i].length;j++) {
				System.out.print(score[i][j]+" ");
			}
			System.out.println();
		}
		System.out.println("2차원 배열의 주소 : "+score);
		System.out.println("2차원 배열의 크기 : "+score.length);
		
		for(int i=0;i<score.length;i++) {
			System.out.println("1차원 배열의 주소값 : "+score[i]);
			System.out.println("1차원 배열의 크기 : "+score[i].length);
		}
	}

}

5.객체 배열

  • 요소가 되는 객체의 주소(4바이트)가 들어갈 메모리만 할당되고(null) 각 요소 객체는 생성하여 저장해야함.
  • 객체 배열 복사하기
- System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)   
  • 복사 원본의 위치 : 배열 src의 인덱스 srcPos
  • 복사 대상의 위치 : 배열 dest의 인덱스 destPos
  • 복수할 요소의 수 : length

  • 얕은 복사
   - 객체 주소만 복사됨
   - 두 배열이 같은 객체를 가리킴
   - 배열의 요소를 수정하면 같 수정됨.     
  • 깊은 복사
   - 각각의 객체를 생성하여 그 객체의 값을 복사하여 배열이 서로 다른 객체를 가리키도록 함.
public class ObjectArrayCopy {

	public static void main(String[] args) {
		
		Book[] book = new Book[5];
		Book[] copyBook = new Book[5];
		
		book[0] = new Book("Go 프로그래밍 쿡북", "예런 토레스");
		book[1] = new Book("Go 프로그래밍 쿡북1", "예런 토레스1");
		book[2] = new Book("Go 프로그래밍 쿡북2", "예런 토레스2");
		book[3] = new Book("Go 프로그래밍 쿡북3", "예런 토레스3");
		book[4] = new Book("Go 프로그래밍 쿡북4", "예런 토레스4");
		
		
		System.arraycopy(book, 0, copyBook, 0, book.length);
		
		
		book[0].setTitle("데이터 플랫폼 설계와 구축");
		book[0].setAuthor("다닐 즈부리브스키");
		
		System.out.println("===========book===========");
		for(Book book1 : book) {
			book1.showInfo();
		}
		System.out.println("=========copyBook=========");
		for(Book copyBook1 : copyBook) {
			copyBook1.showInfo();
		}
	}

}

댓글남기기