자료 구조란 간단히 말해 데이터를 효율적으로 조직화, 관리, 저장하는 방법입니다.
왜 이렇게 데이터를 체계적으로 다뤄야 할까요?
바로 애플리케이션의 성능을 극대화하기 위해서입니다.
올바른 자료 구조를 선택하면 데이터 처리 속도가 빨라지고, 메모리 사용이 최적화되며,
전반적인 애플리케이션의 효율이 크게 향상됩니다.
알고리즘은 이러한 자료 구조를 사용하여 특정 문제를 해결하기 위한 단계별 절차를 말합니다.
즉, 알고리즘은 문제 해결을 위한 '레시피'라면
자료 구조는 이 레시피에서 사용되는 '재료'에 해당합니다.
자료 구조의 선택은 알고리즘의 효율성에 직접적인 영향을 미칩니다.
예를 들어, 대규모 데이터를 처리할 때
배열 보다는 해시 테이블을 사용하면 데이터 검색 시간을 크게 단축시킬 수 있습니다.
반면, 데이터가 순차적으로 추가되고 삭제되는 경우는
연결 리스트가 더 적합할 수 있습니다.
이렇게 각 자료 구조는 그것이 가장 잘 동작하는 특정한 시나리오가 있습니다.
따라서 우리가 해결해야 할 문제의 성격을 이해하고,
그 문제에 가장 적합한 자료 구조를 선택하는 능력은 매우 중요한 기술입니다.
그래서 자료 구조에 대한 이해는 컴퓨터과학을 이해하는 것 이상으로
문제 해결의 근본 방법에 대한 이해로 생각할 수 있습니다.
*해시 테이블 : 해시 함수를 통해 계산된 인덱스로 접근하므로 전체 데이터를 돌지 않고 직접 바로 검색하여 시간이 단축됨
*연결 리스트: 원소가 추가될 때마다 공간을 할당받아 추가(동적 할당 방식)하기 때문에 배열의 공간 낭비를 피할 수 있는 자료 구조
추상 데이터 타입(ADT)은 데이터와 그 데이터에 대한 연산을 추상화(단순화)한 것입니다.
데이터의 구체적인 표현을 숨기고,
사용자에게는 데이터에 대한 연산만을 제공합니다.
예를 들어, 리스트 ADT는 데이터를 일련의 요소로 관리하며,
요소 추가, 삭제, 검색 등의 연산을 제공하지만,
이러한 연산이 내부적으로 어떻게 구현되는지는 사용자가 알 필요가 없습니다.
즉 데이터를 구현할 수 있는 방법보다는
무엇을 할 수 있을지 연산의 종류에만 초점을 맞춥니다.
(예) 리스트, 스택, 큐, 트리, 해시테이블, 그래프 등
자료 구조와 알고리즘은 레고 블럭과 같습니다.
블럭(자료 구조)이 어떻게 조합되는지에 따라(알고리즘)
멋진 성이 하지만
때로는 무슨 형태인지 모르게 완성이 되기도 합니다^^
내 코드가 생각하는 코딩 유머짤의 그림처럼요.
코드를 필요할 때마다 검색해서 고치다보니
누더기가 된 코드를 보면서 다시 한번 자료
구조와 알고리즘에 대한 공부가 필요하다고
생각이 들어 아래 목차로 정리해 보려고 합니다.
**객체 지향 언어 (Object-Oriented Language)프로그래밍에서 '객체'라는 기본 단위를 사용하여 데이터와그 데이터에 대한 연산을 하나로 묶는 방식을 제공하는 언어로 각 객체는 고유한 속성(데이터)과 행동(함수나 메소드)을 가진다. 객체 지향 언어의 핵심 개념에는 클래스, 상속, 다형성, 캡슐화 등이 있다. (예) Java, C++, Python, Ruby 등 **클래스 (Class)클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 '틀' 이다.객체의 속성(상태를 나타내는 변수)과 메소드(객체의 행동)를 정의하고 클래스를 기반으로 생성된 객체를 인스턴스라고 한다. 클래스는 ADT의 개념을 실제 프로그래밍 언어에서 사용할 수 있도록 구현하는 방법 중 하나이다. (예) 스택 ADT는 데이터를 저장하는 순서대로 접근하고, 가장 마지막에 추가된 데이터부터 제거하는 '후입선출(LIFO)'의 특성을 가진다. 스택 ADT를 구현하기 위해 '스택 클래스'를 정의할 수 있으며, 이 클래스는 데이터를 저장할 구조와 push(추가), pop(제거), peek(마지막 요소 확인) 등의 메소드를 포함한다. |
[참고자료]
쉽게 배우는 자료 구조 with 파이썬 (문병로, 한빛아카데미)