개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
배열 (Array)
배열이란?
배열은 연관된 데이터를 모아서 관리하기 위한 데이터 타입입니다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것입니다.
배열의 특징
- 정적 자료구조
배열은 크기를 미리 정해놓아야 하며, 해당 크기 만큼의 연속된 메모리 주소를 할당 받습니다.
- 연속된 메모리 주소
배열의 요소들은 메모리 상에 연속적으로 저장됩니다. 이러한 특성 때문에 배열의 요소에 빠르게 접근할 수 있습니다.
- 활용
- 정보를 저장할 때 사용합니다.
- 인덱스(index)
- 배열의 각 요소는 인덱스를 통해 접근합니다.
- 인덱스는 0부터 시작하며, array[0]와 같이 대괄호 안에 인덱스를 명시(배열 이름 [인덱스 값])하여 해당 위치의 요소에 접근할 수 있습니다.
- 장점
- 인덱스를 통해 임의의 요소에 빠르게 접근할 수 있습니다.
- 특정 인덱스의 요소에 접근하는 시간 복잡도는 O(1)입니다.
- 단점
- 배열의 크기는 고정되어 있으므로, 배열의 크기보다 더 많은 데이터를 저장할 수 없습니다.
- 배열 중간에 요소를 삽입하거나 삭제하는 경우에는 다른 요소들을 이동시켜야 하므로 O(n)의 시간 복잡도가 소요됩니다.
- 중간에 요소를 삽입하거나 삭제하는 경우, O(n)의 시간 복잡도가 소요됩니다.
배열을 도서관 책장이라고 이해하면 쉽습니다.
- 정적 자료구조 → 도서관 책장 칸의 개수가 미리 정해져 있는 것처럼, 배열의 크기가 미리 지정되어야 합니다.
- 연속된 메모리 주소 → 책장에 책을 일렬로 나열해 놓는 것처럼, 배열의 요소들이 메모리 상에 연속적으로 저장됩니다.
- 인덱스 → 책장의 각 칸에 번호가 매겨져 있는 것은 배열의 인덱스와 같은 개념입니다. 첫 번째 칸은 0번, 두 번째 칸은 1번 등으로 번호가 붙어 있어 책을 찾을 때 해당 번호를 사용할 수 있습니다.다.
- 장점 → 장의 번호를 알고 있다면 해당 책을 바로 찾을 수 있는 것처럼, 배열에서도 인덱스를 통해 특정 요소에 빠르게 접근할 수 있습니다.
- 단점 → 책장이 꽉 차면 더 이상 책을 넣을 수 없는 것처럼, 배열도 미리 지정된 크기 이상으로 요소를 저장할 수 없습니다. 또한 책장 중간에 책을 넣거나 빼려면 다른 책들을 옮겨야 하는 것처럼, 배열에서도 중간에 요소를 삽입하거나 삭제하려면 다른 요소들을 이동시켜야 합니다.
연결 리스트 (Linked List)
연결 리스트란?
연결 리스트(Linked List)는 데이터를 효과적으로 저장하고 관리하기 위한 자료구조입니다. 배열이 연속된 메모리 공간에 데이터를 저장하는 것과 달리, 연결 리스트는 떨어진 메모리 공간에 존재하는 노드(Node)들을 포인터로 연결하여 데이터를 저장합니다.
연결 리스트의 특징
- 동적 자료구조: 크기를 미리 지정할 필요가 없습니다. 필요에 따라 메모리를 할당받아 데이터를 저장할 수 있으며, 연속된 메모리 공간을 요구하지 않습니다.
- 노드(Node):
- 연결 리스트는 노드라는 단위로 구성됩니다.
- 각 노드는 데이터를 저장하는 부분과 다음 노드의 주소를 가리키는 포인터로 이루어져 있습니다. 이를 통해 노드들이 연결되어 있는 구조를 만듭니다.
- 활용
- 크기를 유동적으로 관리해야 할 때, 또는 데이터 추가 및 삭제가 빈번할 때 유용합니다.
- 장점
- 크기의 제한이 없으므로 필요에 따라 데이터를 추가하거나 삭제할 수 있습니다.
- 특히 맨 앞이나 맨 뒤에 노드를 삽입하거나 삭제하는 경우에는 O(1)의 시간 복잡도로 빠르게 처리할 수 있습니다.
- 단점
- 배열과 달리 인덱스를 통한 임의 접근이 불가능합니다.
- 특정 위치의 데이터에 접근하기 위해서는 처음부터 순차적으로 탐색해야 하므로 배열에 비해 탐색 속도가 느립니다. 즉, O(n)의 시간 복잡도가 소요됩니다.
연결 리스트를 목걸이라고 이해하면 쉽습니다.
- 동적 자료구조 → 목걸이에 구슬을 추가하거나 제거할 수 있는 것처럼, 연결 리스트의 크기는 미리 정해져 있지 않고 필요에 따라 동적으로 변경될 수 있습니다.
- 노드 → 목걸이의 각 구슬은 데이터를 담고 있으며, 연결되어 있습니다.
- 장점 → 목걸이에 구슬을 추가하거나 제거하는 것이 쉬운 것처럼, 연결 리스트에서도 노드를 추가하거나 삭제하는 것이 간단합니다. 새로운 노드를 추가할 때는 포인터만 변경하면 됩니다.
- 단점 → 목걸이에서 특정 구슬을 찾기 위해서는 처음부터 순서대로 찾아야 하는 것처럼, 연결 리스트에서도 특정 노드에 접근하기 위해서는 순차적으로 탐색해야 하므로 접근 속도가 느립니다.
한 걸음 더 <배열과 연결 리스트의 시간 복잡도>
ㅤ | 배열 | 연결 리스트 |
접근 | O(1) | O(n) |
삽입 (양 끝) | O(1) (맨 뒤)* | O(1) (맨 앞)** |
삽입 (중간) | O(n) | O(n) |
삭제 | O(n) | O(n) |
탐색 | O(1) | O(n) |
*배열의 크기가 충분하다면 마지막 위치에 요소를 삽입하면 되므로 상수 시간 O(1)이 소요됩니다.
**연결 리스트의 맨 앞에 새로운 노드를 추가할 때는 새로운 노드를 생성하고 포인터를 변경하면 되므로 상수 시간 O(1)이 소요됩니다.
배열과 연결 리스트의 차이점
배열 (Array) | 연결 리스트 (Linked List) |
정적 자료구조 | 동적 자료구조 |
미리 크기를 정해 놓음 | 크기를 정할 필요가 없음 |
연속된 메모리 주소를 할당 받음 | 연속된 메모리 주소를 할당 받지 않음 |
접근, 탐색 용이 | 추가, 삭제 용이 |
index 존재 | Node 존재 |
내일배움캠프는 개발에 필요한 핵심만 배웁니다
지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
CREDIT
글 | 이지선 내일배움캠프 수료생
편집 | 정효재 팀스파르타 에디터
취업 준비, 어디서부터 시작해야 할지 모르겠다면?
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
Share article
Subscribe to our newsletter