배열과 리스트는 비슷한 점도 많지만 다른 점도 많다.
배열
- 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조
- 배열의 값은 인덱스를 통해 참조할 수 있다
- 새로운 값 삽입, 특정 인덱스 값 삭제가 어렵다
- 배열의 크기는 선언할 때 지정, 선언 후에 크기를 늘리거나 줄일 수 없다
- 구조가 간단하다.
리스트
- 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조이다.(노드란 CS에서 값, 포인터를 쌍으로 갖는기초 단위)
- 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야한다, 다시 말해 접근 속도가 느리다.
- 포인터로 연결되어 있으므로 데이터 삽입, 삭제 연산 속도는 빠르다.
- 크기가 가변적인 데이터를 다룰때 적절하다
- 포인터를 저장할 공간이 필요하여 배열보다 구조가 복잡하다.
What I learned?
1. 상황과 목적에 맞는 자료구조 사용
-> 잦은 조회가 필요할 경우 배열을 사용할 수 있고, 잦은 추가, 삭제 동작이 요구될 경우는 리스트를 사용하여 성능 향상을 기대할 수 있다.
평소 Java를 사용하여 개인 공부를 하거나 실무에서 코딩을 할 때 배열보다는 주로 List 자료구조를 많이 사용했었는데 이번에 자료구조를 다시 공부해보면서 이 둘의 명확한 차이를 배울 수 있었다.
하드웨어 성능이 많이 발달된 요즘 배열과 리스트 둘 간의 조회 또는 삽입, 삭제 유의미한 성능 차이가 있는지 또한 궁금해졌다.