– 배열(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 + " "); } } }
– 객체 배열 사용
자바에서 객체 배열은 객체를 요소로 갖는 배열로, 동일한 클래스 타입의 여러 객체를 저장하고 관리할 수 있습니다. 객체 배열을 사용하면 여러 객체를 효율적으로 다룰 수 있어, 복잡한 데이터 구조를 쉽게 관리할 수 있습니다.
객체 배열의 특징
- 동일한 클래스 타입의 객체 저장: 객체 배열은 동일한 클래스 타입의 객체만 저장할 수 있습니다.
- 참조 변수 배열: 객체 배열은 객체의 참조(레퍼런스)를 저장합니다. 배열의 각 요소는 객체를 참조합니다.
- 고정된 크기: 배열의 크기는 선언 시에 정해지며, 이후에는 변경할 수 없습니다.
- 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만, 객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(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차원 배열의 특징
- 배열의 배열: 2차원 배열은 배열을 요소로 갖는 배열입니다.
- 행과 열: 2차원 배열의 각 요소는 또 다른 배열로, 주로 행과 열의 형태로 데이터를 저장합니다.
- 고정된 크기: 배열의 크기는 선언 시에 정해지며, 이후에는 변경할 수 없습니다.
- 이차원 이상으로 구현 된 배열
- 평면(이차원 배열) 이나 공간(삼차원 배열)을 활용한 프로그램 구현
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의 특징
- 동적 크기 조정:
ArrayList
는 요소를 추가하거나 삭제할 때 자동으로 크기가 조정됩니다. - 순차적 요소 접근: 내부적으로 배열을 사용하기 때문에 인덱스를 통한 요소 접근이 빠릅니다.
- 유연한 데이터 관리: 다양한 데이터 타입을 저장할 수 있으며, 제네릭스를 사용하여 타입 안전성을 보장합니다.
- 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당 하고 복사해야 했음
- 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야 함
- 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(); } } }