개요
- 컴퓨터 프로그램은 데이터를 입력받아 조작하고 반환하는 것이 전부이다.
- 데이터를 어떻게 조직하느냐에 따라 프로그램은 수십 수백 배 빠르거나 느리게 실행될 수 있다.
- 데이터를 조직하는 방법을 자료구조라고 한다.
- 더 나은 프로그램을 작성하기 위해서는 다양한 자료구조를 알아야 하고, 자료구조에 적절한 알고리즘을 선택하는것도 중요하다.
자료구조
- 자료구조는 크게 선형 구조와 비선형 구조로 나눌 수 있다.
- 선형구조에는 리스트, 스택, 큐가 있고, 비선형 구조에는 그래프와 트리가 있다.
- 대부분의 자료구조는 네 가지 기본 방법을 사용하며 이를 연산이라고 한다.
- 읽기 : 자료구조 내 특정 위치를 찾아보는 것
- 검색 : 자료구조 내 특정 값을 찾는 것
- 삽입 : 자료구조에 새로운 값을 추가하는 것
- 삭제 : 자료구조 내 특정 값을 삭제하는 것
- 자료구조를 구현하는 방법에는 크게 순차 자료구조와 연결 자료구조가 있다.
- 순차 자료구조 : 구현할 자료들을 논리적인 순서대로 메모리에 연속하여 저장하는 구현 방식으로 배열을 이용
- 연결 자료구조 : 노드라는 여러개의 메모리 청크에 데이터를 저장하며, 이를 연결하여 구현하는 방식으로 참조를 이용

*지역성(locality) : CPU가 기억장치의 특정 부분에 위치한 데이터나 프로그램 코드를 집중적으로 액세스하는 현상이다.
추상 자료형
- 자료구조는 상기했듯 같은 기능을 한다고 할지라도 서로 다르게 구현할 수 있다.
- 순차적으로 구현할 수도 있고, 연결적으로 구현할 수도 있다.
- 그렇기 때문에 구체적으로 어떻게 구현하라는 내용이 없이 기능만 정의한 추상 자료형 형태로 나타냄
컬렉션
- 대부분의 언어는 프로그래머의 편의성을 위해 여러 자료구조와 알고리즘을 제공하는데, 이를 컬렉션 혹은 컨테이너라고 부른다.
- 이런 라이브러리는 자료구조 구현체와 자료에 하나씩 접근할 수 있는 반복자를 제공한다.
foreach문