[JAVA] 객체와 객체 지향 – 배열(Array),객체배열,2차원 배열,객체 배열을 구현한 클래스 Array List

– 배열(Array)

자바에서 배열은 동일한 타입의 여러 값을 하나의 변수로 저장할 수 있는 자료구조입니다. 배열은 고정된 크기를 가지며, 효율적인 데이터 접근과 관리가 가능합니다. 배열은 기본 자료형과 참조 자료형 모두 사용할 수 있습니다.
  • 동일한 자료형의 순차적 자료 구조
  • 인덱스 연산자 [ ]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함
public class ArrayTest {
    public static void main(String[] args) {
        int[] arr1 = new int[10];
        int arr2[] = new int[10];

        int[] numbers = {1,2,3,4,5};

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

        int[] ids;
        ids = new int[]{10, 20, 30, 40};

        for(int id : ids){
            System.out.println(id);
        }

        int[] arr = new int[10];

        for (int i = 0, num = 1; i < arr.length; i++, num++){
            arr[i] = num;
        }

        int total = 0;
        for (int i = 0; i < arr.length; i++){
            total += arr[i];
        }
        System.out.println(total);

        int count = 0;
        double[] dArr = new double[5];
        dArr[0] = 1.1; count++;
        dArr[1] = 2.1; count++;
        dArr[2] = 3.1; count++;
        double mtotal = 1;

        for(int i = 0; i < count; i++){
            mtotal *= dArr[i];
        }
        System.out.println(mtotal);

        char[] alphabets = new char[26];
        char ch = 'A';

        for (int i = 0; i < alphabets.length; i++){
            alphabets[i] = ch++;
        }

        for (char alpha : alphabets){
            System.out.print(alpha + "  ");
        }
    }
}

– 객체 배열 사용

자바에서 객체 배열은 객체를 요소로 갖는 배열로, 동일한 클래스 타입의 여러 객체를 저장하고 관리할 수 있습니다. 객체 배열을 사용하면 여러 객체를 효율적으로 다룰 수 있어, 복잡한 데이터 구조를 쉽게 관리할 수 있습니다.

객체 배열의 특징

  1. 동일한 클래스 타입의 객체 저장: 객체 배열은 동일한 클래스 타입의 객체만 저장할 수 있습니다.
  2. 참조 변수 배열: 객체 배열은 객체의 참조(레퍼런스)를 저장합니다. 배열의 각 요소는 객체를 참조합니다.
  3. 고정된 크기: 배열의 크기는 선언 시에 정해지며, 이후에는 변경할 수 없습니다.
  • 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만, 객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당되고(null)각 요소 객체는 생성하여 저장해야 함
//얕은 복사
public class ObjectCopy { 
    public static void main(String[] args) {

        Book[] library = new Book[5];
        Book[] copyLibrary = 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, copyLibrary, 0, 5);
        for (Book book : library){
            book.showBookInfo();
        }
        System.out.println("============================");
        for(Book book : copyLibrary){
            book.showBookInfo();
        }
        library[0].setAythor("박완서");
        library[0].setTitle("나목");

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

        for (Book book : library){
            book.showBookInfo();
        }
        System.out.println("============================");
        for(Book book : copyLibrary){
            book.showBookInfo();
        }

    }
}

//깊은 복사
public class ObjectCopyTest {
    public static void main(String[] args) {

        Book[] library = new Book[5];
        Book[] copyLibrary = 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++){

            copyLibrary[i] = new Book();
            copyLibrary[i].setAythor(library[i].getAythor());
            copyLibrary[i].setTitle(library[i].getTitle());
        }

        library[0].setAythor("박완서");
        library[0].setTitle("나목");


        for (Book book : library){
            book.showBookInfo();
        }
        System.out.println("============================");
        for(Book book : copyLibrary){
            book.showBookInfo();
        }
    }
}

– 2차원 배열

자바에서 2차원 배열은 배열의 배열로 구성되며, 주로 행과 열의 형태로 데이터를 저장할 때 사용됩니다. 2차원 배열은 표, 행렬, 그리고 여러 데이터 구조를 표현하는 데 유용합니다.

2차원 배열의 특징

  1. 배열의 배열: 2차원 배열은 배열을 요소로 갖는 배열입니다.
  2. 행과 열: 2차원 배열의 각 요소는 또 다른 배열로, 주로 행과 열의 형태로 데이터를 저장합니다.
  3. 고정된 크기: 배열의 크기는 선언 시에 정해지며, 이후에는 변경할 수 없습니다.
  • 이차원 이상으로 구현 된 배열
  • 평면(이차원 배열) 이나 공간(삼차원 배열)을 활용한 프로그램 구현
   int   [ ] [ ]     arr     =      new int     [2]       [3];
자료형         배열이름                        행 개수   열 개수
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();
        }

    }
}

– 객체 배열을 구현한 클래스 ArrayList2차원 배열의 특징

자바의 ArrayList 클래스는 동적으로 크기가 조정되는 배열을 구현한 것으로, 표준 배열의 단점을 보완하고 다양한 편리한 기능을 제공합니다. ArrayList는 자바 컬렉션 프레임워크의 일부로, 데이터 저장, 검색, 삽입, 삭제를 쉽게 할 수 있습니다.

ArrayList의 특징

  1. 동적 크기 조정: ArrayList는 요소를 추가하거나 삭제할 때 자동으로 크기가 조정됩니다.
  2. 순차적 요소 접근: 내부적으로 배열을 사용하기 때문에 인덱스를 통한 요소 접근이 빠릅니다.
  3. 유연한 데이터 관리: 다양한 데이터 타입을 저장할 수 있으며, 제네릭스를 사용하여 타입 안전성을 보장합니다.
    • 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당 하고 복사해야 했음
    • 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야 함
    • ArrayList는 객체 배열을 좀더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스
    • 이미 많은 메서드들이 최적의 알고리즘으로 구현되어 있어 각 메서드의 사용 방법만 익히면 유용하게 사용할 수 있음
    메서드설명
    boolean add(E e)요소 하나를 배열에 추가합니다. E는 요소의 자료형을 의미합니다.
    int size( )배열에 추가된 요소 전체 개수를 반환합니다.
    E get(int index)배열의 index 위치에 있는 요소 값을 반환합니다.
    E remove(int index)배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환합니다.
    boolean isEmpty( )배열이 비어 있는지 확인 합니다.
    import java.util.ArrayList;
    
    public class Book {
        private String title;
        private String aythor;
        public  Book(){
    
        }
        public Book(String title, String aythor){
            this.title = title;
            this.aythor = aythor;
        }
    
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getAythor() {
            return aythor;
        }
        public void setAythor(String aythor) {
            this.aythor = aythor;
        }
        public void showBookInfo(){
            System.out.println(aythor + "," + title);
        }
    }
    
     
    public class ArrayListTest {
        public static void main(String[] args) {
    
            ArrayList<Book> list = new ArrayList<Book>();
    
            list.add(new Book("태백산맥1", "조정래"));
            list.add(new Book("태백산맥2", "조정래"));
            list.add(new Book("태백산맥3", "조정래"));
            list.add(new Book("태백산맥4", "조정래"));
            list.add(new Book("태백산맥5", "조정래"));
    
            for (int i = 0; i < list.size(); i++){
                list.get(i).showBookInfo();
            }
        }
    }

    Leave a Comment