자료구조
는 자료(데이터)를 효과적으로 효과적으로 표현하고 효율적인 저장과 처리하도록 하는 논리적 구조를 이야기 합니다. 자료구조에는 선형, 비선형, 파일, 단순구조가 존재합니다.시중에 나와있는 책이나 여러 글들을 보면 선형구조인 리스트, 스택, 큐/ 비선형 구조인 트리, 그래프를 다루고 있습니다. 마찬가지로 이 카테고리에서도 이 구조들을 중점으로 써내려갈 생각입니다.
이렇게 여러개인 자료구조 중에서는 어떤것이 제일 좋고, 무엇을 써야할까요? 라는 생각이 듭니다. 이 질문에 대한 정답은 '상황마다 다르다' 입니다. 이것이 우리가 자료구조를 공부해야하는 이유라고 생각합니다. 자료구조는 언급했듯이 자료의 효율적인 저장과 관리, 처리를 위해서 라는 목적을 가지고 사용하게됩니다.
그렇다면 위의 목적에 부합하게 자료구조를 선택하는 기준은 무엇일까요. 보통 다음과 같은 기준을 가지고 자료구조를 선택하게 됩니다.
계속 언급한 자료구조의 목적인 자료의 저장, 처리, 관리를 위해서라면 당연히 효율이 중요하겠죠. 그래서 상황에 맞는 구조를 이용하는 것은 효율을 높이는 방법이 됩니다. 경험담으로는 코딩테스트 사이트에서 문제를 풀다가 정답은 맞췄지만 시간초과가 뜨는 경우가 빈번했는데요. 이럴때마다 다른 자료구조로 교체해서 프로그램을 작성하니 해결된 경우가 많았습니다. 이처럼 자료구조마다 상황에 맞는 구조가 존재하기에 그 효율성을 따져보고 사용해야합니다.
추상화는 어떤 개념을 구체적으로 나타내기 보단 핵심이 되는 부분만을 추려내는 것 입니다. 구현에 대해서는 사람마다 다르게 구현되기 때문에 그 부분에 대해서는 무시하고, 이 구조가 어떻게 동작하고 사용되는지에 초점을 맞춥니다. 그래서 이 구현법이 정답이다~라기보다는 이 구조가 이렇게 동작하니까 이렇게 사용하면 되겠구나~에 대해 집중하는 것이 중요합니다.
이것은 자바같은 객체지향 프로그래밍에서도 등장하는 원리인데 보통 한 코드를 작성하면 한 프로그램에서만 가동되도록 작성하지 않습니다. 그렇지 않는다면 효율이 매우 떨어지겠죠. 자료구조도 마찬가지 입니다. 모든 자료를 처리할 수 있어야 하므로 다른 프로그램에서도 동작한다는 재사용성 특징을 가지고 있습니다.