Linked List 가 Primitive Type을 제외하고 자료형의 가장 기본이 되는 이유는 배열과 달리 동적 할당이 가능하고, 메모리가 허용되는 한 무한개의 데이터를 저장할 수 있다. 링크드 리스트를 이용하는 스택, 큐 구조와 순차 접근의 열쇠를 푸는 트리, 해시 등 다양한 변종들의 모체이다.
그러나 실무에서는 많이 쓰이지 않는다. 삽입, 삭제에 O(n)이 들며, 용량이 제한된 Array를 많이 쓴다. 링크드 리스트는 O(1)이라고는 하나 좌/우 포인터를 끊어주는 코드를 더 넣어야 한다. Array의 경우 용량 제한이 있지만 python의 List나 Objective-c의 MutableArray로 변경되어 추가가 되도록 만들어 준다. 물론, 무한 추가가 가능한 그 내부는 결국 linked list이다.
이는 물리 메모리 자체가 포인터의 next로 이루어지는 linked List 이기 때문이다. 메모리 내부 하드 어가 관리하는 메모리, MMU, OS 단 VM, 페이징, 컴파일러의 메모리 관리 메커니즘을 거치는데 실로 단순한 내용이 여러 개 중첩되면서 복잡해진다. 하드웨어 familier 한 코드 작성에는 물리 메모리 주소를 찾지만 소프트웨어 단에서는 전체적인 메모리 모니터링으로 갈음한다.
관리자가 하드웨어 구성도 못하고 메모리가 뭔지 디지털 회로 실습 정도는 듣고 말했으면 좋겠다는 생각이 두리 뭉실 적어본다.
뭐, 현실이 나보다 위에 있어서 내가 피곤해서 그런 게 아니고 무시하고 넘어갈 때 그 표정들이 정말 안쓰러워서 그런다. 일일이 가르쳐 주면 주말에 스터디하자고 하지 않나... 그러면서 또 코딩은 결국 안 함. ㅋ
최근댓글