자료구조 왜케 어려워?
우리가 자료구조 (Data structure)와 알고리즘 (Algorithm)을 공부하는 이유는 무엇일까요?
이번 학기 수강할 과목이기 때문이기도하고, 프로그램 언어를 공부하는데 꼭 필요하다는 선배들의 말 때문이기도 합니다. 조금 사무적으로 말을 하자면, 실제 업무를 효율적으로 수행하는 프로그램을 만들고 수행하는데 있다고도 말합니다.
그렇다면, 우리는 정말 위와 같은 이유때문에 그....어려운 학문(?) 을 공부한다는 건 의지박약인 저같은 사람들에게는 전산은 내 적성이 아니구나라는 생각밖에 들지 않을 겁니다.
물론, No pain, no gain! 이라는 말이 있듯이, 쉽게 얻어지는 일은 없습니다만, 내가 중고등학교때처럼, 미분이니 적분이니 어디 써야할지 모르고 공부하는것 보다는 살아가는 동안 어떤 부분에서 도움이 될지 구체적인 판단이 든다면, 공부하는데 조금 재밌어 지지 않을런지요?
자료구조가 왜 필요하죠?
그동안의 울분이 조금 쌓여서 서론이 길었습니다. 그렇다면, 자료구조가 뭐고, 왜 필요한지 살짝 알아 볼까요?
우리가 집을 지을때를 생각해 봅시다. 집을 짓기 위해서는 우선 설계도가 필요하겠죠? 그렇다면 설계도에는 무슨 내용이 들어갈까요? 그쵸, 무슨 재료로 어떤 모양으로 집을 지을건지 그니깐, 나무집을 짓기로 결정했다면, 통나무로 지을건지 합판으로 지을건지,
방과 욕실은 몇개나 어디에 만들건지, 지붕은 뾰족하게 할건지, 편평하게 할건지 등등의 내용이 들어 갈겁니다. 이런 설계가 없이 그때 그때 필요할 때마다 결정을 한다면, 외벽을 세운 다음에 창문을 뚫거나하는 불필요하고 비효율적인 작업이 계속 반복 되겠죠?
그렇다면, 설계도만으로 집을 지을 수 있나요? 아니죠...집을 짓기 위한 사람과 기계가 있어야 겠죠. 또, 시작은 어디에서 마무리는 어디에서 할지를 결정을 해야죠. 즉 집을 짓기 위한 자원 관리표와 일정관리표가 있어야 합니다. (그래야 지붕은 올리고 벽을 세우는 일이 없겠죠 ^^)
프로그래밍도 마찬가지 입니다. 자료구조란 집을 지을때 설계도의 내용과 비슷합니다. 프로그램을 작성하기 위해 어떤 재료와 구조를 사용할지를 결정하는게 자료구조라고 말할 수 있습니다.
앞서 집만들기에서 자원관리나 일정관리와 같이 어떤 순서로 어떤 공법으로 진행할 것인지는 알고리즘이라고 할 수있겠습니다.
결론을 내리자면, 문제 (현실세계입니다.)를 표현하는 방식(What)에 해당하는 것은 자료구조이며, 해결을 어떻게 할 것인가 (How)에 해당하는 것이 알고리즘이라고 할 수 있겠습니다.
사실 자료구조와 알고리즘을 따로 떼어내 생각하는 경우는 별로없으며, 영역의 구분이 모호한 경우도 있습니다. 굳이 구분을 하자면, 자료구조는 데이터의 표현에 집중한 학문이며, 알고리즘은 성능의 개선관점에 집중한 학문이라고 말할 수 있겠죠...
다음에는 많이 알려진 자료구조에 대해서 구체적으로 알아볼께요....근데 C언어 문법 정도는 -특히 포인터와 구조체 - 알고 계셔야 따라오실수 있습니다. 따라오세요...^^
이 글을 읽으시는 분들은 어릴때 부터, MFC, VB, C, java 등의 언어들을 마스터 하셔서 자연스럽게 사용을 하시는 분들도 있겠지만, 보통은 머리가 굳은(?) 20대 초반 이후에 컴퓨터 언어에 대해서 접하신 분들도 많이 계실겁니다. 새롭게 시작하시는 분들을 위한 글입니다. 잘 따라와 주세요.
'프로그래밍 > 자료구조' 카테고리의 다른 글
[C언어와 함께 자료구조를] 동적 기억장소 할당 (0) | 2015.03.12 |
---|---|
[C언어와 함께 자료구조를] 구조체 알아보기 (0) | 2015.03.11 |
[C언어와 함께 자료구조를] 문자열과 배열 (0) | 2015.03.10 |
[C언어와 함께 자료구조를] 포인터 활용 (0) | 2015.03.10 |
[C언어와 함께 자료구조를] 변수와 포인터 (0) | 2015.03.09 |
댓글