01. 메모리 IC로 채워진 메모리 구조 살펴보기
•
메모리의 실체는 전자 부품인 메모리 IC다. 메모리 IC에는 DRAM ,SRAM, ROM 등 여러 종류가 있으나 기본적인 구조는 모두 같다.
◦
메모리 IC는 전원, 어드레스 신호, 데이터 신호 및 제어 신호 등을 입출력하기 위한 많은 핀을 가지고 있으며 그 핀에 어드레스를 지정해 데이터를 읽고 쓸 수 있도록 되어 있다.
02. 메모리는 데이터를 저장하는 빌딩
•
프로그래머의 입장에서 메모리는 데이터를 저장하는 빌딩이라고 생가갛면 된다. 1KB 용량의 메모리라면 각 층의 주소가 00000000000부터 1111111111인 1,024층짜리 빌딩으로 나타낼 수 있다.
03. 메모리 어드레스를 저장하는 변수, 포인터!
•
포인터란 데이터 값 자체가 아니라 데이터가 저장되어 있는 메모리의 어드레스를 가지고 있는 변수를 말한다.
◦
따라서 포인터를 사용하면 임의의 어드레스를 지정해서 그 곳에 담긴 데이터를 읽고 쓰는 일이 가능해진다.
04. 배열로 메모리를 효율적으로 사용하자!
•
배열이란 같은 데이터형을 가진 여러 개의 데이터가 메모리 안에 쭉 나열되어 있는 것을 말한다.
◦
배열의 요소가 되는 각각의 데이터는 처음부터 시작해서 일련 번호로 구분되는 데, 이 번호를 인덱스라고 부른다.
◦
인덱스를 지정하면 그에 대응하는 메모리 영역을 읽고 쓸 수 있다. 인덱스와 실제 메모리 어드레스 간의 변환 작업은 컴파일러가 자동으로 수행한다.
•
배열이 메모리 사용법이 기본이 되는 이유는 메모리의 실제 구조와 매우 닮았기 때문이다.
05. 스택과 큐로 메모리를 렌트하자!
•
스택과 큐를 이용하면 어드레스와 인덱스를 지정하지 않고도 배열의 요소를 읽고 쓸 수 있다.
◦
보통 계산 도중 데이터를 임시로 보관하거나 컴퓨터에 접속된 장치의 입출력 데이터 등을 일시적으로 저장할 경우 스택과 큐를 통해 메모리를 사용한다.
06. 리스트가 있어 데이터 추가 삭제가 쉬워진다.
•
리스트와 이진 탐색 트리는 모두 인덱스의 순서와는 무관하게 배열의 요소에 담긴 내용을 읽고 쓰기 위한 것이다.
◦
이때 리스트를 사용하면 배열에 데이터를 추가하거나 삭제하는 작업을 좀더 효율적으로 할 수 있다.
•
리스트는 각각의 배열 요소에 데이터뿐만 아니라 다음 요소의 인덱스도 추가해서 만들어진다. 따라서 데이터 삭제나 추가에서 강점을 보인다.
07. 리스트의 업그레이드, 이진 탐색 트리
•
배열에 요소를 추가할 때 요소에 저장된 값의 크기에 따라 좌우 두 방향으로 나누어지는 리스트를 만든 것이다.