배열과 ArrayList

박정훈·2021년 1월 2일
0

java

목록 보기
4/15

배열

배열 선언 방식

자료형[] 배열_이름 = new 자료형[크기];
자료형 배열_이름[] = new 자료형[크기];

배열을 이루는 각각의 자료를 배열 요소라고 한다. 배열 요소는 자료형이 모두 같다. 배열은 같은 자료형을 순서대로 관리할 때 사용하는 자료구조이다.
'배열형'자료란 의미로 아래와 같은 선언방식을 주로 사용한다.

자료형[] 배열_이름 = new 자료형[크기];

배열 초기화

배열을 선언하면 그와 동시에 각 요소의 값이 초기화된다. 정수는 0, 실수는 0.0, 객체 배열은 null로 초기화된다.

int[] studentIds = new int[] {101, 102, 103}; //크기 생략
int[] studentIds = new int[3] {101, 102, 103}; // 오류 발생
int[] studentIds = {101, 102, 103};

다음과 같이 배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new int[]를 생략할 수 없다. 배열 변수를 선언하고 한번에 초기화하는 경우에는 아래와 같이만 쓸 수 있다.

int[] studentIds;
studentIds = new int[] {101, 102, 103};

배열 특징

  • 인덱스 연산자[]
    배열 요소가 저장된 메모리 위치를 찾아주는 역할이다.
  • 배열의 물리적 위치와 논리적 위치는 같다.
    물리적 위치란 배열이 메모리에서 실제 저장되는 곳을 의미한다.
    논리적 위치란 이론상 배열 위치를 의미한다.
    즉 배열은 실제 값도 바로 이웃한 메모리에 놓인다.
    (배열 이외의 다른 자료구조들은 물리적 위치와 논리적 위치가 다르다.)
  • 배열의 길이
    배열.length;
    
  • 배열을 한번에 출력하기. Arrays 클래스의 toString을 이용한다.
    import java.util.Arrays;
    Arrays.toString(배열);
    System.out.println(Arrays.toString(배열));
    
  • 유효한 배열요소에만 접근하려는 경우
    int size = 0;
    
    위와 같이 변수를 선언한 후 배열에 값이 들어갈때 마다
    size++;
    를 한다. 즉, 프로그래머가 알아서 처리해줘야한다.
  • 자바의 배열은 선언시에는 크기를 명시할 수 없으며, 생성시에 크기를 명시한다.
  • 하나의 배열에 여러가지 데이터형을 혼합해서 사용할 수 없다.
  • 선언 시에는 배열에 들어갈 데이터 타입을 결정하고, 생성 시 만들 배열의 크기를 결정한다. 그리고 초기화 과정을 통하여 배열에 들어갈 값을 입력해 준다.

배열 복사

배열 복사 방법

  1. 기존 배열과 배열 길이가 같거나 더 긴 배열을 만들고 반복문을 사용하여 각 요소 값을 반복해서 복사하는 방법
  2. System.arraycopy() 메서드를 사용
  • System.arraycopy(src, srcPos, dest, destPos, length);
    src: 복사할 배열 이름
    srcPos: 복사할 배열의 첫 번째 위치
    dest: 복사해서 붙여 넣을 대상 배열 이름
    destPos: 복사해서 대상 배열에 붙여넣기를 시작할 첫 번째 위치
    length: src에서 dest로 자료를 복사할 요소 개수

배열 복사 종류

  1. 얕은 복사(shallow copy)
    주소 값만 복사하는 경우
    반복문을 사용하건 System.arraycopy()메서드를 사용하건 객체 배열을 복사하면 항상 인스턴스 주소가 복사된다.
  2. 깊은 복사(deep copy)
    복사할 배열에 인스턴스를 따로 생성한 후 요소 값을 복사한다.

향상된 for 문

배열 요소 값을 순서대로 하나씩 가져와서 변수에 대입한다. 따로 초기화와 종료 조건이 없다. 모든 배열의 시작 요소부터 끝 요소까지 실행한다.

for(변수 : 배열)
{
	반복 실행문;
}

예시

for(String lang : strArr)
{
	System.out.println(lang);
}

다차원 배열

이차원 이상으로 구현한 배열.
자료형 배열이름 = new 자료형 행개수 열_개수

  • 다차원 배열의 초기화
    int[][] arr = {{1, 2, 3}, {4, 5, 6}};
    
    int[][] arr = new int[2][3];
    arr[0][0] = 1;
    arr[0][1] = 2;
    arr[0][2] = 3;
    arr[1][0] = 4;
    arr[1][1] = 5;
    arr[1][2] = 6;
    

ArrayList

기본 배열은 프로그램에서 사용하려면 항상 배열 길이를 정하고 시작한다. 기본 배열은 선언 이후 배열의 크기를 변경할 수 없다. 이러한 배열을 정적 배열이라하고 이 단점을 해결하기 위해 ArrayList를 사용한다.

ArrayList는 자바가 제공하는 객체 배열 클래스이다. ArrayList 외에도 배열을 쉽게 사용할 수 있도록 제공되는 클래스가 있지만 ArrayList가 효율이 가장 높기 때문에 많이 사용한다.

ArrayList는 java.util 패키지에 구현되어 있는 클래스다.
java.util 패키지는 자바에서 사용하는 여러 자료구조와 알고리즘에 관련된 클래스를 구현해 놓은 패키지이다.
내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되어 있다고 알려주기 위해 코드 맨 위에 선언하는 것을 임포트(import)한다고 한다.
즉, ArrayList를 사용하려면 자바 클래스를 선언하기 전에 아래의 코드를 써야한다.

import java.util.ArrayList;

ArrayList 클래스의 주요 메서드

boolean add(E e): 요소 하나를 배열에 추가한다. E는 요소의 자료형을 의미한다.
int size(): 배열에 추가된 요소 전체 개수를 반환한다.
E get(int index): 배열의 index 위치에 있는 요소 값을 반환한다.
E remove(int index): 배열의 index 위치에 있는 요소 값을 제거하고 
		     그 값을 반환한다.
boolean isEmpty(): 배열이 비어 있는지 확인한다.
ArrayList< Book> library = new ArrayList< Book>();
library.add(new Book("태백산맥", "조정래"));

기타

  • 순회
    각 배열 요소를 하나씩 찾아본다는 뜻
  • 참조 자료형 변수
    기본 자료형이 아닌 클래스형으로 선언하는 변수를 의미한다.
    Book[] library = new Book[5];
    
    Book 인스턴스가 5개 생성된 것이 아니라 Book 인스턴스 주소 값을 담을 공간 5개가 생성된 것이다.
  • JavaDoc
    ArrayList에 대해 궁금하다면 이클립스의 편집 창에서 ArrayList라고 적고 F1키를 누르면 ArrayList 클래스 설명이 있는 JavaDoc을 볼 수 있다.
  • 제네릭 자료형
    <E>와 같은 형태를 제네릭(generic) 자료형이라고 한다.
    ArrayList< E> 배열_이름 = new ArrayList< E>();
    
    예시
    ArrayList< Book> 배열_이름 = new ArrayList< Book>();
    
profile
정팔입니다.

0개의 댓글