Language/Java

'Do it 자바프로그래밍 입문' 7장 정리

ABCD 2022. 9. 12.

배열(Array)

  • 여러개의 변수를 일일이 쓰지 않고 사용하는 자료형

배열요소

  • 배열을 이루는 가각의 자료

배열선언방식

인덱스 연산자 [ ]

  • 배열 요소가 저장된 위치를 찾아주는 역할

배열 초기화 하기

1. int[ ] studentIDs = new int[ ] {101, 102, 103};   // 개수는 생략
2. int[ ] studentIDs = new int[ 3 ] {101, 102, 103};  // 개수 생략하지 않아 오류
3. int[ ] studentIDs = {101, 102, 103};   // 요소가 3개인 배열 생성
4. int[ ] studentTDs;
   int[ ] studentIDs = new int[ ] {101, 102, 103};
// 자료형을 우선 선언하고 초기화하는 경우 new int[ ] 생략할 수 없음

배열순서

  • 0부터 n-1번까지 ( total : n개 )

length

  • 배열의 길이를 나타냄 ( 전체 요소 개수 )
  • 배열의 전체 길이만큼 반복수행시 length 속성을 사용

size

  • 유효한 값의 개수를 나타낼 때 사용
  • ex)
double[ ] data = new double[5];
int size = 0;

data[0] = 10.0; size++;
data[1] = 20.0; size++;
data[2] = 30.0; size++;

for(int i = 0; i < size; i++){
	System.out.println(data[i]);

배열 복사하기

  • 방법 1 : for문을 사용하여 복사
  • 방법 2 : System.arraycopy( ) 메서드를 사용하여 복사
  • System.arraycopy(src, srcPos, dest, destPos, length)

얕은 복사

  • 인스턴스 자체가 아닌 인스턴스의 주소값을 복사
package array;

public class ObjectCopy2 {

	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("어떻게 살 것인가", "유시민");
		System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
		
		for ( int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookinfo();
		}
		
		bookArray1[0].setBookName("나목"); 	// bookArray1 배열의 첫번째
		bookArray1[0].setAuthor("박완서"); 	//  요소 값 변경
		
		System.out.println("===bookArray1===");
		for ( int i = 0; i < bookArray1.length; i++) {	
		bookArray1[i].showBookinfo();
		}
		System.out.println("===bookArray2===");
		for ( int i = 0; i < bookArray2.length; i++) {	
		bookArray2[i].showBookinfo(); 		// bookArray2 배열 요소 값도 변경되어 출력
		}
	}

}

깊은 복사

  • 인스턴스를 따로 관리할 때 직접 인스턴스를 만들고 그 값을 복사
package array;

public class ObjectCopy3 {

	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[1] = new Book();	//디폴트 생성자로 bookArray2의 배열 인스턴스 생성
		bookArray2[2] = new Book();	//
		
		for(int i = 0; i < bookArray1.length; i++) {			//
			bookArray2[i].setBookName(bookArray1[i].getBookName());//1을 2에 복사
			bookArray2[i].setAuthor(bookArray1[i].getAuthor());//
		}
		
		for(int i= 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookinfo();			// bookArray2 출력
		}
		
		bookArray1[0].setBookName("나목");		// 첫번째 배열의
		bookArray1[0].setAuthor("박완서");		// 요소 값 수정
			System.out.println("===bookArray1===");
			for(int i = 0; i < bookArray1.length; i++) {
				bookArray1[i].showBookinfo();
			}

		System.out.println("===bookArray2===");
			for(int i = 0; i < bookArray2.length; i++) {
				bookArray2[i].showBookinfo();
			}
	}

}

얕은복사와 깊은복사의 차이??

  • 깊은 복사에서는 디폴트 생성자를 사용하여 인스턴스를 생성하고 거기에 자료를 복사하는 방식?? (확실하지 않다.)

향상된 for문

  • 배열의 처음 ~ 끝까지 모든 요소를 참조할 때 용이

 

 

 

 

 

 

 

 

 

 

다차원 배열

  • 수학의 평면 ( x, y) 을 나타내는 것처럼 이차원 이상으로 구현하는 배열

이차원 배열

 

 

 

arr.length

  • 행의 갯수

arr[i].length

  • 열의 갯수

 

 

ArrayList 클래스

  • 객체 배열을 고나리할 수 있는 멤버 변수와 메서드를 제공하는 클래스

ArrayList 중 주로 사용하는 메서드

  • int size( ) - 배열에 추가된 요소 전체 개수를 반환
  • E get(int index) - 배열의 index 위치에 있는 요소값을 반환
  • boolean add(E e) - 요소하나를 배열에 추가
  • boolean isEmpty( ) - 배열이 비어 있는지 확인
  • E remove(int index) - 배열의 index위치에 있는 요소값을 제거하고 그 값을 반환

ArrayList 기본 형식

ArrayList<E> 배열 이름 = new ArrauList<E>();
  • <E>는 객체의 자료형

임포트(import)

  • 내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되고 있는지를 알려주기 위해 코드 맨 위에 선언하는 것
  • ArrayList를 사용하려면 'import java.util.ArrayList;' 문장을 반드시 작성해야 한다.
728x90
반응형

댓글

💲 추천 글