자바

[JAVA] 객체 배열 만들기

코딩하는둥이 2022. 11. 26. 15:22

객체 배열 만들기

 - 참조 자료형을 선언하는 객체 배열

 - 배열만 생성한 경우 요소는 nul로 초기화됨

 - 각 요소를 new를 활용하여 생성하여 저장해야 함

 

public class BookArray{
    
	public static void main(String[] args){
	    
		Book[] library = new Book[5]; 
		
				
		for(int i=0; i<library.length; i++){  // 결과값이 null 5개 나옴
		    System.out.println(library[i]);
		}
		
		library[0] = new Book("책1", "글쓴이1");
		library[1] = new Book("책2", "글쓴이2");
		library[2] = new Book("책3", "글쓴이3");
		library[3] = new Book("책4", "글쓴이4");
		library[4] = new Book("책5", "글쓴이5");
		
		for(int i=0; i<library.length; i++){  // Book 인스턴스 멤버들
		   library[i].showBookInfo();
		} 
		
		for(int i=0; i<library.length; i++){  //  Book 인스턴스를 저장한 메모리 공간 주소
		    System.out.println(library[i]);
		}
	}
	
}

 

배열 복사하기

 - 기존 배열과 같은 배열을 만들거나 배열이 꽉 찬 경우 더 큰 배열을 만들고 기존 배열 자료를 복사할 수 있음

 - System, arraycopy(src, srcPos, dest, destPos, length);

매개변수 설명
src 복사할 배열 이름
srcPos 복사할 배열의 첫 번째 위치
dest 복사해서 붙여 엏을 대상 배열 이름
destPos 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치
length src에서 dest로 자료를 복사할 요소 개수 

 

public class Main {

	public static void main(String[] args) {
        int[] array1 = {10, 20, 30, 40, 50};
		int[] array2 = {1, 2, 3, 4, 5};
		
		System.arraycopy(array1, 0, array2, 1, 4); 
        //  (복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)
		for(int i =0; i<array2.length; i++) {
			System.out.println(array2[i]);
		}
	}
}


// 결과 값 1 10 20 30 40

 

객체 배열 복사하기

 - 얕은 복사: 배열 쇼소의 주소만 복사되므로 배열 요소가 변경되면 복사된 배열의 값도 변경됨

public class Main {
	public static void main(String[] args) {
        Book[ ] bookArray1 = new Book[3];
		Book[ ] bookArray2 = new Book[3];
		
		bookArray1[0] = new Book("책1", "글쓴이1");
		bookArray1[1] = new Book("책2", "글쓴이2");
		bookArray1[2] = new Book("책3", "글쓴이3");
		System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
		
		for(int i=0; i<bookArray2.length; i++) {
		 bookArray2[i].showBookInfo();
		}
	}
}

 

객체 배열의 깊은 복사

// 디폴트 생성자로 bookArray2 배열 인스턴스 생성
bookArray2[0] = new Book();
bookArray2[1] = new Book();
bookArray2[2] = new Book();


// bookArray1 배열 요소를 새로 생성한 bookArray2 배열 인스턴스에 복사
for(int i=0; i<bookArray1.length; i++) {
    bookArray2[i].setBookName(bookArray1[i].getBookName());
    bookArray2[i].setAuthor(bookArray1[i].getAuthor());
}	

// bookArray1 첫 번째 배열 요소 값 수정 
bookArray1[0].setBookName("책4");
bookArray1[0].setAuthor("글쓴이4");

	System.out.println("bookArray1");
    for(int i=0; i<bookArray1.length; i++) {
        bookArray1[i].showBookInfo(); //bookArray1 배열 요소 값 출력
    }	
    
// bookArray1 배열 요소 값과 다른 내용이 출력함
	System.out.println("bookArray2");
    for(int i=0; i<bookArray2.length; i++) {
        bookArray1[i].showBookInfo(); // bookArray2 배열 요소 값 출력
    }
}

 

서로 가은 인스턴스의 메모라 요소를 가지게 됨

향상된 for문(enchanced for loop) 

 - 배열 요소의 처음부터 끝까지 모든 요소를 참조할 때 편리한 반복문 

 

public class Main
{
	public static void main(String[] args) {
		String[] strArray = {"자바", "자바스크립트", "파이썬", "C"};
		
		for(String lang : strArray){
		    System.out.println(lang);
		}
	}
}