한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지_패스트 캠퍼스 챌린지 12일차

2021. 9. 17. 18:39IT공부/Java&Spring 이용한 웹프로그래밍

21. 객체 배열 사용하기

객체 배열 선언과 구현

  • 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만, 객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당되고(null) 각 요소 객체는 생성하여 저장해야 함

Book.java

public class Book {

          private String title;

          private String author;

          public Book() {

           }

          public Book(String title, String author) {

           this.title = title; this.author = author;

          }

          public String getTitle() {

          return title;

          }

          public void setTitle(String title) {

           this.title = title;

           }

           public String getAuthor() {

              return author;

           }

           public void setAuthor(String author) {

              this.author = author;

           }

          public void showBookInfo() {

            System.out.println(title + "," +author);

           }

   }

BookArrayTest.java

public class BookArrayTest {

             public static void main(String[] args) {

               Book[] library = new Book[5];

              for(int i =0; i<library.length; i++) {

               System.out.println(library[i]);

              }

          }

     }

 

  • 객체를 생성하여 각 배열의 요소로 저장하기

public class BookArrayTest {

           public static void main(String[] args) {

            Book[] library = new Book[5];

            library[0] = new Book("태백산맥1", "조정래");

            library[1] = new Book("태백산맥2", "조정래");

            library[2] = new Book("태백산맥3", "조정래");

            library[3] = new Book("태백산맥4", "조정래");

            library[4] = new Book("태백산맥5", "조정래");

            for(int i =0; i<library.length; i++) {

               System.out.println(library[i]); library[i].showBookInfo();

            }

        }

}

 

객체 배열 복사하기

  • System.arrayCopy(src, srcPos, dest, destPos, length) 자바에서 제공되는 배열 복사 메서드
  • 얕은 복사즉, 두 배열이 같은 객체를 가리킴
  • 객체 주소만 복사되어 한쪽 배열의 요소를 수정하면 같이 수정 됨

public class ObjectCopy {

         public static void main(String[] args) {

            Book[] library = new Book[5];  

            Book[] copyLibaray = new Book[5];

            library[0] = new Book("태백산맥1", "조정래");

            library[1] = new Book("태백산맥2", "조정래");

           library[2] = new Book("태백산맥3", "조정래");

           library[3] = new Book("태백산맥4", "조정래");

            library[4] = new Book("태백산맥5", "조정래");

           System.arraycopy(library, 0, copyLibaray, 0, 5);

           System.out.println("======copy library=========");

           for( Book book : copyLibaray ) {

            book.showBookInfo();

           }

           library[0].setTitle("나목");

           library[0].setAuthor("박완서");

           System.out.println("======library=========");

           for( Book book : library) {

            book.showBookInfo();

           }

          System.out.println("======copy library=========");

          for( Book book : copyLibaray) {

          book.showBookInfo();

          }

         }

      }

 

 

깊은 복사

각각의 객체를 생성하여 그 객체의 값을 복사하여 배열이 서로 다른 객체를 가리키도록 함

public class ObjectCopy2 {

      public static void main(String[] args) {

          Book[] library = new Book[5];

          Book[] copyLibaray = new Book[5];

          library[0] = new Book("태백산맥1", "조정래");

          library[1] = new Book("태백산맥2", "조정래");

          library[2] = new Book("태백산맥3", "조정래");

          library[3] = new Book("태백산맥4", "조정래");

          library[4] = new Book("태백산맥5", "조정래");

          copyLibaray[0] = new Book();

          copyLibaray[1] = new Book();

          copyLibaray[2] = new Book();

          copyLibaray[3] = new Book();

          copyLibaray[4] = new Book();

          for(int i = 0; i< library.length; i++) {

          copyLibaray[i].setTitle(library[i].getTitle());

          copyLibaray[i].setAuthor(library[i].getAuthor());

         }

          library[0].setTitle("나목");

          library[0].setAuthor("박완서");

         System.out.println("======library=========");

          for( Book book : library) {

            book.showBookInfo();

         }

         System.out.println("======copy library=========");

         for( Book book : copyLibaray) {

           book.showBookInfo();

         }

      }

}

22. 2차원 배열 사용하기

다차원 배열

  • 이차원 이상으로 구현 된 배열
  • 평면 (이차원 배열) 이나 공간(삼차원 배열)을 활용한 프로그램 구현

이차원 배열 예제

int[][] arr = {{1,2,3}, {4,5,6}}

 

public class TwoDimensionTest {

          public static void main(String[] args) {

          int[][] arr = { {1,2,3}, {4,5,6,7}};

          int i, j; for(i =0; i<arr.length; i++) {

             for(j=0; j<arr[i].length; j++) {

              System.out.print(arr[i][j] + " ");

              }

             System.out.println(", \t" + arr[i].length);

             System.out.println();

               }

          }

    }

23. 객체 배열을 구현한 클래스 ArrayList

java.util 패키지에서 제공되는 ArrayList

  • 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야 했음
  • 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야 함
  • ArrayList는 객체 배열을 좀더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스
  • 이미 많은 메서드들이 최적의 알고리즘으로 구현되어 있어 각 메서드의 사용 방법만 익히면 유용하게 사용할 수 있음

ArrayList의 주요 메서드

 

ArrayList를 활용한 간단한 예제

          import java.util.ArrayList;

          import ch21.Book;

           public class ArrayListTest {

              public static void main(String[] args) {

                 ArrayList<Book> library = new ArrayList<Book>();

                 library.add(new Book("태백산맥1", "조정래"));

                 library.add(new Book("태백산맥2", "조정래"));

                library.add(new Book("태백산맥3", "조정래"));

                library.add(new Book("태백산맥4", "조정래"));

              library.add(new Book("태백산맥5", "조정래"));

                 for(int i =0; i<library.size(); i++) {

                      library.get(i).showBookInfo();

             }

          }

     }

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

강의에 대해 정확하게 알고 싶다면 

https://bit.ly/37BpXiC