[Java] 배열(Array)

vednuegnuoy·2020년 12월 16일
0
post-thumbnail

배열이란?

동일한 자료형을 순차적으로 관리하는 가장 기본적인 자료 구조

배열의 특징

  • 연속된 자료구조
  • 배열에 저장되는 값은 모두 같은 데이터 유형
  • 배열은 행 우선으로 데이터가 기억장소에 할당
  • 배열은 물리적인 위치와 논리적인 위치가 동일
  • 배열의 값을 요소(element)라 하고 그 순서를 인덱스(index)라고 함

배열 선언 및 생성 방법

int[] arr = new int[10];
int arr[] = new int[10];

위의 배열을 생성한 것으로 배열의 길이인덱스 번호를 알아보기
배열의 길이(length) : 10
배열의 인덱스(index) 번호 : 0 ~ 9(length-1)
* 모든 배열의 첫 번째 인덱스는 0


📄 배열 예제 1

선언된 arr 배열에 넣어진 각각의 값과, 배열 값의 총 합을 출력하기
int[] arr = new int[10]; // 10의 크기를 가진 배열 arr 생성
int total = 0;

// arr 배열의 길이값 마다 1~10까지의 값을 넣기
int num = 1;
for(int i = 0; i < arr.length; i++) {
	arr[i] = num;
	num++;
}

// arr 배열에 넣어진 값 출력
for(int i = 0; i < arr.length; i++) {
	total += arr[i];
	System.out.println(arr[i]); 
}

// arr 배열 값의 총 합 출력
System.out.println("배열 값의 총 합 : " + total);

📄 배열 예제 2

문자 배열 생성 및 출력하기 (대문자를 A-Z까지 배열에 저장하고 이를 다시 출력)
char alpha[] = new char[26]; // 26의 크기를 가진 alpha 배열 생성
char upper = 'A';
for (int i = 0; i < alpha.length; i++) {
	alpha[i] += upper;
	upper++; // A-Z까지 배열에 저장하기 위해 upper 값 증가

	// A-Z까지 저장된 alpha 문자 배열 출력
	System.out.println(alpha[i]);
}

기본 자료형 배열

  • 자료 값을 담는 배열
  • 직접 값을 메모리에 저장
int[] arr = new int[10];

기본 자료형 배열 복사

int[] arr1 = {10, 20, 30, 40, 50};
int[] arr2 = {1, 2, 3, 4, 5};

// arr1배열에서 0번째 부터 3까지 arr2배열 1번째에 복사
System.arraycopy(arr1, 0, arr2, 1, 3);

for(int i = 0; i< arr2.length; i++) {
	System.out.println(arr2[i]);
}
// 결과 //
1
10
20
30
5

참조 자료형 배열(객체 배열)

  • 기본 자료형 배열과 다르게 객체를 담는 배열
  • 객체는 생성자를 통해 만드는 인스턴스를 뜻함
  • 직접 인스턴스를 메모리에 기억하는 것이 아니고 주소 값을 담음

📄 객체 배열 예제

// Book 인스턴스 생성 후 제목 변수, 생성자, Getter/Setter 메서드 작성
public class Book {
    private String title;

    public Book(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    
    public void bookInfo() {
    	System.out.println(title);
    }
}
// Book 클래스 객체 배열 library 5개를 생성
Book[] library = new Book[5];

library[0] = new Book("이것이 자바다");
library[1] = new Book("자바 프로그래밍");
library[2] = new Book("시나공 정보처리기사 실기");
library[3] = new Book("코드로 배우는 스프링 웹프로젝트");
library[4] = new Book("자바의 정석");

for(int i = 0; i < library.length; i++) {
	// 배열에 담겨있는 인스턴스의 주소 값
	System.out.println(library[i]);
    
	// 배열에 담겨있는 인스턴스의 주소 값과 bookInfo() 메서드를 통해 title 출력
	library[i].bookInfo();
}
// 결과 //

OOP_LEC.Book@4554617c
이것이 JAVA다
---------------------
OOP_LEC.Book@74a14482
자바 프로그래밍
---------------------
OOP_LEC.Book@1540e19d
시나공 정보처리기사 실기
---------------------
OOP_LEC.Book@677327b6
코드로 배우는 스프링 웹프로젝트
---------------------
OOP_LEC.Book@14ae5a5
자바의 정석
---------------------

객체 배열 복사

  • 얕은복사
    • 인스턴스가 새로 생기는 것 아니고 주소만 복사
    • 두 개의 객체 배열이 같은 것을 가리킴
    • System.arraycopy 사용
  • 깊은복사
    • 인스턴스 구별되며, 따로관리
    • 일일이 객체를 새로 만들어서 대입, 복사
    • 첫번째 배열을 변경한다고해서 두번째 배열에게 영향을 주지 않음

향상된 For문(Enhanced for)

배열 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문 (JAVA 5 버전 부터 지원)

for(변수 : 배열) {
	반복 실행문;
}
// ex)
for(Book book : library) {
	book.bookInfo();
}

다차원 배열

2차원 이상의 배열
지도, 게임, 평면이나 공간을 구현할 때 사용

📄 2차원 배열 예제

2차원 배열의 길이(length)에 대한 이해

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

	// 배열의 전체 길이 => 행의 개수 2 출력, 행의 개수로 2차원 배열임을 확인 가능
	System.out.println(arr.length); 
    
	System.out.println(arr.length[0]); // 배열의 첫번째 행의 개수 => 1,2,3 = 3 출력
	System.out.println(arr.length[1]); // 배열의 두번째 행의 개수 => 4,5,6,7 = 4 출력
// 각 행을 기준으로 열을 돌리면 됨
// 이중 for문
for(int i = 0; i < arr.length; i++) { // 행을 기준으로
	for(int j = 0; j < arr[i].length; j++){ // 각 행의 길이만큼
		System.out.printf(arr[i][j] +" ");
	}
	System.out.println();
}
// 결과 //
1 2 3
4 5 6 7

ArrayList

  • 객체 배열을 쉽게 사용할 수 있도록 자바에서 제공하는 클래스
  • 배열을 사용할 때 가장 많이 사용하는 클래스
  • 객체 배열을 사용하는데 필요한 여러 메서드 들이 구현

ArrayList의 주요 메서드

메서드설명
boolean add(E e)요소 하나를 배열에 추가, E는 요소의 자료형을 의미
boolean isEmpty()배열이 비어 있는지 확인
int size()배열에 추가된 요소 전체 개수를 반환
E get(int index)배열의 index 위치에 있는 요소 값을 반환
E remove(int index)배열의 index 위치에 있는 요소 값을 제거 후 그 값을 반환

📄 ArrayList 예제

// 어떤 클래스를 배열의 요소로 쓸 것인지 지정해 주는것 -> ex)String
// 어떤 타입의 객체로 배열을 만들 것인가?
ArrayList<String> list = new ArrayList<String>();

// list 요소 추가 : add() 메서드
list.add("a");
list.add("b");
list.add("c");
		
// list의 요소가 들어있는 총 개수 : size() 메서드
// 배열의 length와 size의 차이 
// 배열은 길이는 10개 element값은 3개 들어가도 길이는 10
// size는 정확히 element가 들어간 갯수 만 의미 3개

// 출력1
for(int i = 0; i < list.size(); i++) {
	String str = list.get(i);
	System.out.println(str);
}

// 출력2 - 향상된 for문
for(String s : list) {
	System.out.println(s);
}
// 결과 // 
a
b
c

[참고]
Object는 모든 클래스의 최상위 클래스
ArrayList<> 지정 안할시 Object형으로 들어가게됨
Object 클래스는 나중에 다시 자세하게 정의

0개의 댓글