배열 (Array)

2024. 6. 23. 21:28·CS/Data Structure
목차
  1. 자료구조: 배열

자료구조: 배열

배열(Array)은 동일한 타입의 요소들이 연속적으로 배치된 자료구조입니다. 각 요소는 인덱스를 통해 접근할 수 있으며, 이러한 인덱싱 덕분에 배열은 고정된 크기와 빠른 읽기 속도를 갖는 것이 특징입니다. 배열의 인덱스는 일반적으로 0부터 시작합니다.

배열의 특징

  1. 고정 크기: 배열은 생성 시 크기가 고정되며, 한 번 설정된 크기는 변경할 수 없습니다.
  2. 인덱스를 통한 빠른 접근: 배열은 인덱스를 통해 O(1) 시간 복잡도로 요소에 접근할 수 있습니다.
  3. 연속된 메모리 공간: 배열의 요소는 메모리에 연속적으로 저장되어 있습니다.

배열의 장단점

장점:

  • 빠른 접근 속도: 인덱스를 통해 즉시 요소에 접근할 수 있어 매우 빠릅니다.
  • 간단한 구현: 배열은 간단한 구조로 되어 있어 이해하고 사용하기 쉽습니다.

단점:

  • 고정된 크기: 배열의 크기는 한 번 설정되면 변경할 수 없으므로, 크기를 미리 정확히 예측해야 합니다.
  • 삽입 및 삭제의 비효율성: 배열 중간에 요소를 삽입하거나 삭제하는 작업은 비용이 많이 듭니다. 이는 요소들을 이동시키기 때문입니다.

JavaScript 배열의 특징

동적 크기 조정

JavaScript 배열은 동적 크기를 가지므로, 요소를 추가하거나 제거할 때 배열의 크기가 자동으로 조정됩니다. 이는 전통적인 고정 크기 배열과 큰 차이점입니다.

내부 구현

JavaScript 엔진마다 배열의 내부 구현이 다를 수 있지만, 일반적으로 JavaScript 배열은 다음과 같은 방식으로 동작합니다:

  1. 연속된 메모리 공간: 처음에는 연속된 메모리 공간에 할당되지만, 배열이 커지면 해시 테이블과 유사한 방식으로 변환될 수 있습니다.
  2. 해시 테이블: JavaScript 배열은 동적으로 크기를 조정하기 때문에, 해시 테이블을 사용하여 빠르게 요소를 추가하거나 삭제할 수 있습니다.

배열 성능

접근

  • O(1): 인덱스를 통해 요소에 접근하는 시간 복잡도는 여전히 O(1)입니다. 이는 배열의 주요 장점 중 하나입니다.

삽입 및 삭제

  • O(1) ~ O(n): 배열의 끝에 요소를 추가하거나 제거하는 작업은 평균적으로 O(1) 시간이 걸립니다. 그러나 배열의 중간에 요소를 삽입하거나 삭제하는 작업은 O(n) 시간이 걸릴 수 있습니다.
Q. 자바스크립트의 배열은 왜 동적 크기를 가질까?

A.
- 다양한 데이터 처리 요구를 유연하게 지원
- 개발자에게 편리함을 제공하기 위해서입니다.

1. 유연한 데이터 처리
JavaScript는 웹 개발을 주요 목적으로 하며, 웹 애플리케이션에서는 다양한 형태의 데이터와 크기를 처리해야 합니다. 동적 배열은 데이터를 처리하는 데 있어 매우 유연합니다. 예를 들어, 사용자가 입력한 데이터를 실시간으로 추가하거나 제거해야 하는 상황에서 동적 배열은 매우 유용합니다.

2. 편리한 코드 작성
고정 크기의 배열을 사용하는 언어에서는 배열의 크기를 미리 지정해야 합니다. 이는 프로그램을 작성할 때 배열의 최대 크기를 예상하기 어렵게 만듭니다. 동적 배열을 사용하면 배열의 크기를 사전에 지정할 필요 없이, 필요에 따라 배열의 크기를 조정할 수 있어 코드 작성이 훨씬 간편해집니다.

3. 메모리 관리의 자동화
동적 배열은 메모리를 자동으로 관리합니다. JavaScript 엔진은 필요에 따라 배열의 크기를 조정하고 메모리를 할당하거나 해제합니다. 이는 개발자가 메모리 관리에 신경 쓸 필요 없이 배열을 사용할 수 있게 합니다.

4. 성능 최적화
JavaScript 엔진은 동적 배열의 성능을 최적화하기 위해 다양한 내부 메커니즘을 사용합니다. 예를 들어, 배열이 특정 크기를 초과하면, 더 큰 메모리 블록을 할당하고 기존 요소들을 새로운 메모리 블록으로 복사합니다. 이러한 과정을 통해 배열의 동작을 효율적으로 유지합니다.

5. 호환성과 표준 준수
JavaScript는 웹의 표준 언어로서 다양한 환경에서 일관되게 동작해야 합니다. 동적 배열은 이러한 환경에서 호환성을 유지하며 일관된 동작을 보장합니다. 이는 JavaScript의 표준인 ECMAScript 사양에 명시되어 있으며, 모든 브라우저와 JavaScript 환경에서 동일하게 동작합니다.

동적 배열의 작동 방식
JavaScript 배열의 동적 크기 조정은 내부적으로 다음과 같은 방식으로 작동합니다:
초기 크기 할당: 배열을 생성할 때, JavaScript 엔진은 초기 크기의 메모리를 할당합니다.크기 확장: 배열의 크기가 초기 할당된 크기를 초과하면, 엔진은 더 큰 크기의 새로운 메모리 블록을 할당하고 기존 배열 요소를 새로운 블록으로 복사합니다.크기 축소: 배열에서 요소가 제거될 때, 엔진은 필요에 따라 메모리 사용을 최적화합니다. 하지만 일반적으로 메모리 축소는 확장보다 덜 빈번하게 발생합니다.

 

정리

- 배열의 특징으로는 고정크기 / 인덱스를 통한 빠른접근 (O(1) 시간복잡도) / 연속된 메모리 공간

- 배열의 장점은 빠른 접근속도, 간단한 구현 

- 배열의 단점은 고정된 크기, 삽입 및 삭제가 비효율적임 

 

- 자바스크립트의 배열의 경우 동적 크기를 갖는데 데이터 처리 요구를 유연하게 지원하기 위함.

- 자바스크립트는 초기 배열 크기 지정 후, 추후 해시 테이블과 같은 방법으로 사용됨.

'CS > Data Structure' 카테고리의 다른 글

해시테이블 (Hash Table)  (0) 2024.07.01
덱 (Deque)  (0) 2024.06.30
큐 (Queue)  (0) 2024.06.25
스택 (Stack)  (0) 2024.06.24
연결 리스트 (Linked List)  (0) 2024.06.23
  1. 자료구조: 배열
'CS/Data Structure' 카테고리의 다른 글
  • 덱 (Deque)
  • 큐 (Queue)
  • 스택 (Stack)
  • 연결 리스트 (Linked List)
예슬e
예슬e
예슬e
예슬e개발로그
예슬e
전체
오늘
어제
  • 분류 전체보기 (27)
    • 💙 At work in 2024 (0)
    • FrontEnd (7)
      • React (7)
      • Package Manager (0)
      • Build System (0)
      • Transpiler & Bundler (0)
      • Architecture (0)
      • Test (0)
    • BackEnd (2)
    • CS (8)
      • Data Structure (7)
      • Network (1)
    • Algorithm (10)
    • Project (0)
    • Blog (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

리액트파이버
프론트엔드
api만들기
하노이의탑
자바스크립트
리렌더링
재귀
jsx
자바스크립트배열
알고리즘
리액트
useCallback
리액트딥다이브
백엔드
리액트 파이버
메모이제이션
useEffect
useState
자료구조
타뷸레이션

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.3
예슬e
배열 (Array)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.