안녕하세요 여러분. 오늘은 C#으로 프로그래밍을 할 때 가장 기본적이면서도 성능에 큰 영향을 미치는 주제를 가지고 왔습니다. 바로 배열과 리스트의 차이점에 대한 이야기인데요.
처음 코딩을 배울 때는 데이터를 담아두는 그릇이라는 점에서 둘이 비슷해 보여서 아무거나 편한 걸 쓰기 쉽습니다. 저도 예전에는 편하다는 이유로 무조건 리스트만 남발하다가 메모리 사용량이 치솟는 걸 보고 깜짝 놀란 기억이 나네요. 오늘은 이 두 자료구조가 메모리 상에서 어떻게 다르게 동작하는지 제 경험을 녹여 아주 쉽게 풀어볼게요.
먼저 배열은 크기가 고정되어 있다는 가장 큰 특징이 있습니다. 선언할 때 방의 개수를 딱 정해두면 그 크기 그대로 메모리에 연속된 공간을 싹 잡게 됩니다.
공간이 메모리상에 나란히 붙어 있다 보니 인덱스를 통해 특정 위치의 데이터에 접근하는 속도가 정말 눈 깜짝할 사이에 끝납니다. 메모리 오버헤드도 거의 없어서 데이터의 개수가 딱 정해져 있고 빠른 조회만 필요하다면 배열만큼 든든한 게 없더라고요.
하지만 실무에서 코드를 짜다 보면 데이터가 몇 개나 들어올지 미리 알 수 없는 경우가 훨씬 많습니다. 이럴 때 등장하는 게 바로 리스트입니다. 리스트는 내부적으로 배열을 품고 있지만, 공간이 꽉 차면 알아서 더 큰 새로운 배열을 만들고 기존 데이터를 싹 복사해서 옮겨 담는 방식으로 크기를 늘려줍니다.
이 과정을 내부 용량 재할당이라고 부르는데, 개발자가 크기를 신경 쓰지 않아도 되니 정말 편리하죠. 하지만 이 편리함 뒤에는 숨겨진 비용이 있습니다. 공간이 부족할 때마다 새로 메모리를 할당하고 복사하는 작업이 반복되면 가비지 컬렉터에 부담을 주게 되고, 결국 프로그램 전체의 성능 저하로 이어질 수 있습니다.
그래서 성능을 조금이라도 더 쥐어짜야 하는 상황이라면 리스트를 만들 때 미리 예상되는 데이터의 크기를 생성자에 지정해 주는 것이 아주 좋은 팁입니다. 처음부터 넉넉한 공간을 잡아두면 불필요한 메모리 재할당과 복사 과정을 미리 막을 수 있거든요. 작은 습관 같지만 대용량 데이터를 다룰 때는 이 차이가 엄청난 결과를 만들어낸답니다.
데이터의 개수가 고정되어 있고 초고속 조회가 필요하다면 배열을, 데이터가 계속 늘어나고 동적으로 관리해야 한다면 리스트를 쓰되 미리 크기를 가늠해 보는 지혜가 필요합니다.
오늘 이렇게 C# 배열과 리스트의 내부 메모리 차이점을 가볍게 짚어보았는데 어떻게 도움이 되셨나요. 사소해 보이는 자료구조 선택 하나가 프로그램의 체급을 바꿔놓는다는 걸 기억해 주시고요. 비슷한 고민 있으셨다면 댓글로 편하게 이야기 나눠주세요. 이웃 추가하시면 비슷한 실생활 코딩 정보도 자주 올려볼게요.
0 댓글