[자료구조] 배열(Array)

kms·2023년 3월 18일
0

자료구조

목록 보기
3/6

배열(Array)이란?


배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음이다.
대부분의 프로그램 언어에서 동일 타입의 데이터를 저장한다. 예를 들어 배열이 "int"타입인 경우 정수 요소만 저장할 수 있으며 double, float, char 등과 같은 다른 타입의 요소는 저장할 수 없다.
배열을 구성하는 각각의 값을 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)라고 한다.


배열(Array) 특징


  • 배열은 같은 타입의 데이터를 여러개 나열한 선형 자료구조
  • 연속적인 메모리 공간에 순차적으로 데이터를 저장
  • 배열은 선언할 때 크기를 정하면, 그 크기로 고정이 된다.
  • 선언된 값은 다시 배열을 선언하지 않으면 변경할 수 없다.
  • 배열은 인덱스를 통해서 배열에 있는 요소에 접근할 수 있다.
    배열의 주소를 살펴보면, 한 칸마다 배열의 자료형의 크기를 가지고 있다.
  • 배열의 자료형이 int라면, 배열 한 칸의 크기는 int(4byte)가 되는 것이다.



배열(Array) 주요 메서드


  • length() : 배열의 길이를 반환
  • clone() : 배열을 복제
  • equals() : 배열이 다른 배열과 동일한지 여부를 반환
  • fill() : 배열의 모든 요소를 지정된 값으로 설정
  • sort() : 배열의 요소를 정렬
  • binarySearch() : 정렬된 배열에서 지정된 요소를 검색
  • toString() : 배열의 내용을 문자열로 반환
  • copyOf() : 배열의 일부 또는 전체를 복사하여 새로운 배열을 생성
  • asList() : 배열을 List로 변환



배열(Array) 장단점


  • 장점

    • 인덱스를 이용한 접근이 가능하기 때문에 모든 요소에 빠르게 접근할 수 있다.
    • 데이터의 크기가 확정적일 때 배열을 사용하는 것이 메모리나 처리속도 면에서 좋다.
    • 간단하고 사용하기 쉽다.
    • 연속된 메모리 공간에 존재하기 때문에 관리하기가 편하다.
  • 단점

    • 삽입과 삭제가 어렵고 오래 걸린다.
      • 원소를 삽입하거나 삭제할 경우, 다음 항목의 모든 요소를 이동시켜야 한다. (연속된 메모리 공간)
      • 이를 위한 연산작업이 수행되어 비효율적이다.
      • 자료의 수에 비례하여 성능이 떨어지게 된다.
    • 배열의 크기를 바꿀 수 없다.
      • 크게 잡을 경우 메모리가 낭비된다.
      • 작게 잡을 경우 그 이상의 자료를 저장하지 못한다.
    • 메모리의 재사용이 불가능하다.
      • 배열은 초기 사이즈만큼의 메모리를 할당받아 사용하기
      • 데이터의 존재 유무와 관계없이 그 만큼의 메모리를 사용한다.
      • 배열 자체를 제거하지 않는 이상 삭제된 공간의 메모리 재사용은 불가능하다.



배열(Array) 사용 경우


  • 순차적인 데이터를 저장하며 값보다는 순서가 중요할 때
  • 다차원 데이터를 다룰 때
  • 삽입, 삭제 작업이 적을 때 사용하면 좋음
  • 배열에 저장된 데이터를 검색하는 작업이 많을 때( 인덱스로 빠르게 검색 가능)



배열(Array) 시간복잡도


  • 검색(Search): 배열에서 특정 요소를 검색하는 시간 복잡도는 O(n)이다. 배열의 모든 요소를 순차적으로 비교해야 하기 때문이다. 만약 배열이 정렬되어 있다면 이진 검색을 사용하여 시간 복잡도를 O(log n) 로 개선할 수 있다.
  • 삽입(Insertion): 배열에서 특정 위치에 요소를 삽입하는 시간 복잡도는 O(n)이다. 삽입 위치 이후의 모든 요소를 이동시켜야 하기 때문.
  • 삭제(Deletion): 배열에서 특정 위치의 요소를 삭제하는 시간 복잡도는 O(n)이다. 삭제 위치 이후의 모든 요소를 이동시켜야 하기 때문.



복습해보기


0개의 댓글