검수요청.png검수요청.png

배열

해시넷
(Array에서 넘어옴)
이동: 둘러보기, 검색

배열(array)이란 인덱스(index)와 이에 대응하는 데이터들로 이루어진 자료구조이다. 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.[1] 영어 그대로 어레이(array)라고도 한다.

개요[편집]

자바 배열의 인덱스[2]

배열(Array)은 같은 자료형을 가진 연속된 메모리 공간으로 이루어진 자료구조이다. 가장 기본적이 자료구조로, 구조가 간단하여 데이터를 읽어오는데 걸리는 시간이 가장 빨라서 많은 양의 데이터를 처리할 때 유용하다. 배열을 구성하는 값들을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(Index)라고 한다. Java에서 인덱스는 0부터 시작하고, 0을 포함한 양의 정수만을 가질 수 있다. 배열은 많은 데이터들 중 연관이 있는 데이터들끼리 묶어서 관리할 수 있기 때문에 편리하다. 선언되는 형식에 따라서 1차원, 2차원, 다차원 배열로 선언이 가능하다. 하지만 현실적으로 이해가 가능한 2차원 배열까지를 많이 사용한다. [3]

특징[편집]

문법[편집]

배열은 선언과 생성을 따로 작성하는 방법과 선언과 생성을 동시에 작성하는 방법이 있다. 선언과 생성을 따로 작성할 경우에는 선언을 먼저한 후 new 키워드를 이용하여 실제 배열로 생성한다. 선언과 생성을 동시에 작성할 경우에는 '='를 기준으로 왼쪽엔 선언을, 오른쪽엔 배열을 생성한다. 선언을 하는 방법이 두가지가 있는데 두가지 방법 모두 배열을 만들기 위해 사용할 수 있지만, 첫번째 방법을 권장한다. [3]

선언 방법[편집]

1. 타입[] 배열이름;
2. 타입 배열이름[];
  • 전: 선언 / 후: 생성
1. 타입[] 배열이름;
   배열이름 = new 타입[배열길이];
2. 타입 배열이름[];
   배열이름 = new 타입[배열길이];
  • 동시 : 선언, 생성
타입[] 배열이름 = new 타입[배열길이];

초기화 방법[편집]

배열은 생성과 동시에 자동초기화 되는데 초기화 값은 아래의 표 '배열의 타입'을 참고하면 된다.

1) 배열 생성과 동시에 초기화

// 방법1
타입[] 배열이름 = {값1, 값2, …};
// 방법2
타입[] 배열이름 = new 타입[](값1, 값2, …}; 

2) 생성한 후에 개별적으로 초기화

// 방법1 
타입[] 배열이름 = new 타입[배열길이];
배열이름[0] = 값1;
배열이름[1] = 값2;
배열이름[2] = 값3;
// 방법2
타입[] 배열이름;
배열이름 = new 타입[]{값1, 값2, …};

배열의 타입[편집]

< 배열의 타입 > [3]
배열의 타입 초깃값
char '\u0000'
byte, short, int 0
long 0L
float 0.0F
double 0.0 또는 0.0D
boolean false
배열, 인스턴스 등 null

장단점[편집]

  • 장점

Java의 배열(Array) 장점 첫번째, 가장 기본적인 자료구조로, 구조가 간단하여 구현이 쉽다. 두번째, 검색 속도가 빨라서 인덱스(Index)를 이용한 무작위 접근(Random access)이 가능하므로 검색 부분에서 좋은 성능을 기대할 수 있다. 순차접근(Sequential access)의 경우에도 데이터를 하나의 연속된 메모리 공간에 할당하기 때문에 연결 리스트(Linked list)보다 빠른 성능을 보여준다. 세번째, 배열은 Java의 자료형 중 참조 자료형에 속하는데 참조를 위한 추가적인 메모리 할당이 따로 필요하지않기 때문에 불필요한 메모리 낭비가 없다. [4]

  • 단점

Java의 배열(Array) 단점 첫번째, 자료의 삽입(Insert)과 삭제(Delete)에 비효율적이다. 배열은 연속된 메모리 공간으로 이루어진 자료구조이기에 메모리 자료의 삽입과 삭제를 수행할 경우 다음 항목의 모든 배열의 요소(Element)를 이동시켜야한다. 따라서 자료양에 비례하여 삽입과 삭제에 많은 시간이 소요되기에 그만큼 성능이 떨어지게 된다. 두번째, 배열의 크기를 바꿀 수 없다. 배열은 생성할 때 지정된 크기를 바꿀 수 없기 때문에 예상 공간보다 크게 지정했을땐 메모리가 낭비되고, 예상 공간보다 작게 지정했을땐 메모리가 부족해 저장해야할 자료를 저장할 수 없게 된다. 세번째, 메모리의 재사용이 불가능하다. 배열은 초기에 지정한 크기만큼 메모리를 할당 받아서 사용하기 때문에 데이터의 존재 유무와 상관없이 일정한 크기의 메모리 공간을 차지하고 있다. 즉, 이미 삭제된 데이터라고 하더라도 배열 자체가 메모리에서 제거되지 않는 이상 삭제된 데이터의 메모리 공간을 재사용 하는건 불가능하다. [4]

종류[편집]

1차원 배열[편집]

  • 정의

1차원 배열은 같은 자료형들을 모아둘 수 있는 묶음이 하나밖에 없는 경우를 의미한다. [5]

  • 선언 및 초기화

1차원 배열은 위에 설명한 선언 방법, 초기화 방법과 동일하다.

1차원 배열 예시

Ex1) 선언 및 생성 후 초기화

int[] weight = new int[3];     // 배열 선언 및 생성
weight[0] = 40;                // 배열 초기화
weight[1] = 83;
weight[2] = 57;

Ex2) 선언 후 생성 및 초기화

int[] weight;
weight = new int[]{40, 83, 57};

Ex3) 선언과 동시에 초기화

int[] weight = {40, 83, 57};

Ex4) 선언 및 생성과 동시에 초기화

int[] weight = new int[]{40, 83, 57};

다차원 배열[편집]

  • 정의

다차원 배열(multi-dimensional array)은 2차원 이상의 배열을 의미한다. N차원 배열은 배열 요소로 (N-1)차원 배열을 가지는 배열이다. [6]

2차원 배열[편집]

  • 정의

2차원 배열(Two dimensional array)은 배열의 요소로 1차원 배열을 가지는 배열이다. Java에서는 2차원 배열을 나타내는 타입을 따로 제공하진않지만, 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있다. [6]

2차원 배열 형식[6]
  • 선언 방법
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
  • 초기화 방법

1) 배열 생성과 동시에 초기화

타입[][] 배열이름 = {{값[0][0], 값[0][1],값[0][2]},{값[1][0], 값[1][1],값[1][2]}, …};

2) 생성한 후에 개별적으로 초기화

타입[][] 배열이름 = new 타입[행길이][열길이];
배열이름[0][0] = 값1;
배열이름[0][1] = 값2;
배열이름[0][2] = 값3;
배열이름[…][…] = …;

가변 배열[편집]

  • 정의

가변 배열은 Java에선 2차원 이상의 배열에 대해서 '배열의 배열' 형태로 처리하기 때문에 보다 자유로운 형태의 배열을 구성할 수 있다. 다차원 배열을 생성할 때 전체 배열 크기 중 마지막 배열 크기를 정하지않고, 후에 각각 다른 크기의 배열을 생성함으로써 고정된 형태가 아닌 동적인 배열을 구성하는 것을 의미한다. [7]

  • 문법
타입 배열이름[][] = new 타입[행길이][(빈칸)][8] 

Ex1) 선언 및 생성

int weight[][] = new int[3][];
weight[0] = new int[3];
weight[1] = new int[2];
weight[2] = new int[1];

가변배열 예시1

Ex2) 선언 및 초기화

int weight[][] = { {3, 2, 1}, {1}, {2, 1} };
가변배열 예시2

각주[편집]

  1. java 배열 Array〉, 《개인블로그》, 2016-07-03
  2. Arrays in Java〉, 《GeeksforGeeks》
  3. 3.0 3.1 3.2 1차원 배열〉, 《TCPSCHOOL.com》
  4. 4.0 4.1 배열(Array)의 장단점〉, 《개인블로그》
  5. 배열(Array), 배열 상속 도식도, 배열의 종류〉, 《개인블로그》
  6. 6.0 6.1 6.2 다차원배열〉, 《TCPSCHOOL.com》
  7. 배열(Array)〉, 《개인블로그》, 2016-01-28
  8. 자바 가변 배열 알아보기〉, 《개인블로그》, 2019-01-17

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 배열 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.