[CM202] 01. 데이터 구조에 대해 알아보자
데이터 구조는 무엇일까
데이터 구조(Data Structure)란, 프로그램이 데이터를 효율적으로 저장하고 관리하며 활용할 수 있도록 구성하는 방식을 말합니다. 쉽게 말하자면, 데이터를 어떤 형태로, 어떤 관계로 묶을 것인가를 정하는 설계도이자 틀인 셈이죠. 데이터 구조를 효율적으로 설계하는 것은 프로그램을 만드는데 있어서 기초적이면서 중요한 부분입니다. 대부분의 컴퓨터 과학 학부에서 맨 처음 배우게되는 과목인 것도 그 때문이죠.
객체 지향 패러다임
오늘날의 데이터 구조들은 객체 지향(Object-Oriented) 패러다임을 따릅니다. 객체 지향 패러다임은 데이터를 단순히 바이트와 메모리 주소 덩어리로 보는 것이 아니라, 데이터를 연산하는 수단까지 포함하는 방법을 말합니다. 이 방법을 사용하면 데이터를 접근하거나 수정하기 쉬운, 일종의 캡슐로 만들 수 있습니다. 소프트웨어를 계속해서 재사용할 수 있고, 유지보수가 쉬운 견고함을 제공하는 방법이라고 볼 수 있죠. 이 패러다임을 이용한 객체 지향 프로그래밍(Object-Oriented Programming)에 대해서는 이후에 좀 더 자세히 다루도록 하겠습니다.
데이터 구조의 중요성에 대해 다시 한 번 강조하기 위해, 리눅스의 아버지인 리누스 토르발즈(Linus Torvalds)의 어록을 되새겨봅시다.
나쁜 프로그래머와 좋은 프로그래머의 차이는 코드와 데이터 구조 중 무엇을 더 중요하게 생각하는지에 있다고 생각합니다. 나쁜 프로그래머는 코드에 대해 신경쓰지만, 좋은 프로그래머는 데이터 구조와 그 관계에 대해 신경쓰기 때문입니다.
이는 프로그래밍의 본질을 정확히 짚고 있습니다. 코드는 데이터를 다루기 위한 도구일 뿐이며, 프로그램의 성능은 결국 데이터 구조를 어떻게 설계하는가에 달려 있다는 것이죠. 복잡한 문제를 단순하게 바꾸는 힘, 효율적인 알고리즘을 가능하게 하는 기반, 유지보수와 확장성을 결정짓는 틀, 이 모든 것이 데이터 구조에서 비롯됩니다.
이제부터 우리는 객체지향 패러다임을 따라 각 데이터 구조와 그 구현 방식에 대해서 알아보고, 다양한 상황에서 어떤 구조가 더 좋은지 서로 비교해볼 것입니다.


