[7,8일차] 7장 : 배열과 ArrayList

  • 배열(array)을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.

  • 배열 선언과 초기화
    자료형[ ] V 배열 이름 = new V 자료형[개수];
    자료형 V 배열 이름[ ] = new V 자료형[개수];
int[ ] studentIDs = new int[10]; //int형 요소가 10개인 배열 선언

  • 배열 초기화하기
int[ ] studentIDs = new int[ ] {101, 102, 103}; //개수는 생략함
int[ ] studentIDs = new int[3] {101, 102, 103}; //오류 발생
int[ ] studentIDs = {101, 102, 103}; //int형 요소가 3개인 배열 생성
int[ ] studentIDs; 	//배열 자료형 선언
studentIDs = new int[ ] {101, 102, 103};	//new int[ ]를 생략할 수 없음

  • 배열 선언하기
studentIDs[0] = 10;		//배열의 첫 번째 요소에 값 10을 저장

  • 배열 초기화하고 출력하기

  • 배열 길이만큼 출력하기

    -> double형으로 길이가 5인 배열을 선언. 자바에서 정수 배열과 실수 배열을 별도로 초기화하지 않고 선언하면 배열의 요소 값은 0으로 초기화된다. 배열의 세번째 요소까지만 값을 저장했으므로 4,5번째 요소는 0이 출력된다.

  • 배열의 유효한 요소 값 출력하기

    -> 유효한 값을 저장하고 있는 배열의 요소 개수를 알 수 있다. 12행의 반복문은 유효한 요소 개수만큼만 반복한다.

  • 알파벳 문자와 아스키 코드 값 출력하기

    -> 문자 자료형 배열은 char[ ]로 선언해야 한다.

  • 객체 배열 사용하기
    : 참조 자료형 변수도 여러 개를 배열로 사용할 수 있는데 객체 배열은 int나 char 등 기본 자료형 배열과 사용 방법이 다르다.


    -> 인스턴스를 가리키는 주소 값 5개를 생성했다. 즉 인스턴스가 바로 생성된 것이 아님. 아래 예제를 통해 각 배열 요소에 인스턴스를 생성해 넣었다.

    -> Book 인스턴스 멤버들과 Book 인스턴스를 저장한 메모리 공간 주소를 출력했다.

  • 객체 배열 만들어 활용하기_학생 관리


  • System.arraycopy()로 배열 복사하기
System.arraycopy(복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)


  • 객체 배열 복사하기

    -> bookArray2 배열의 인스턴스를 따로 만들지 않았는ㄴ데 각 요소 값이 잘 출력되고 있다. 객체 배열을 사용하려면 꼭 인스턴스를 생성해서 넣어야 한다고 했는데 어찌된 일일까? (얕은 복사)

  • 객체 배열의 얕은 복사

    -> bookArray1의 변경 사항이 bookArray2에 반영되었다. 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소 값이기 때문에 기존 인스턴스의 주소 값만 복사한다. 결국 두 배열의 서로 다른 요소가 같은 인스턴스를 가리키고 있으므로 복사되는 배열의 인스턴스 값이 변경되면 두 배열 모두 영향을 받는 것이다. 이처럼 주소 값만 복사한다고 해서 '얕은 복사(shallow copy)' 라고 부른다.

  • 깊은 복사 : 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 그 값을 복사해야 한다. 이를 깊은 복사(deep copy)라고 한다.


    -> bookArray1 배열 요소 값과 bookArray2의 배열 요소 값이 서로 다른 내용으로 출력됨.

  • 향상된 for문과 배열
for(변수 : 배열) {
	반복 실행문;
  }


  • 다차원 배열
    : 이차원 이상으로 구현한 배열. 다차원 배열은 평면이나 공간 개념을 구현하는 데 사용한다.
int [ ][ ] arr = new int[2][3];
ㄴ자료형    ㄴ배열 이름    ㄴ행개수, 열개수
int [ ][ ] arr = {{1,2,3}, {4,5,6}};

  • 이차원 배열 초기화하기

  • 이차원 배열의 길이 출력하기

    -> 위 코드를 보면 이차원 배열을 선언만 하고 초기화를 따로 하지 않았기 때문에 모두 0으로 자동 초기화 된 것을 알 수 있다. 출력된 내용 중 마지막 두 줄은 행 길이와 열 길이다.

  • ArrayList 클래스 사용하기
    : 기본 배열은 항상 배열 길이를 정하고 시작하는데 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 한다. 혹은 배열 중간에 요소를 삭제하는 경우에도 배열 요소 위치를 변경해야 한다. 이럴 때 ArrayList 클래스를 사용하여 객체 배열을 손쉽게 관리할 수 있다.
ArrayList<E> 배열 이름 = new ArrayList<E>();
ex) ArrayList<Book> library = new ArrayList<Book>();

-> ArrayList는 java.util 패키지에 구현되어 있는 클래스이기 때문에 프로그램 시작 전에 임포트해주어야 함.


  • ArrayList 클래스 사용하기

    -> 기본 배열과 다르게 배열 전체 길이를 미리 지정하지 않고 add() 메서드를 사용해 생성자만 호출하면 된다.

  • 배열 응용 프로그램_학생 성적 출력 프로그램 구현하기


좋은 웹페이지 즐겨찾기