[정글] WEEK05 - WIL : 탐험준비 Red-Black Tree 회고

Jayden·2022년 5월 9일
1

정글

목록 보기
7/13

WEEK05 - 탐험준비 Red-Black Tree 회고

이번 주차부터는 OS프로젝트에 들어가기에 앞서 C언어를 익히고 ubuntu 환경에서 RBtreemalloc, 그리고 proxy 서버를 구현한다. 그 첫번째로 Red-Black Tree라는 자료구조를 공부하고 구현하였다.

C언어는 일반적으로 사용하는 프로그래밍 언어 중 가장 기계어수준에 가까운 언어로, 알고리즘 공부에 사용했던 파이썬에 비해 작성이 까다로운 언어이다. 변수를 선언하거나 함수를 작성할때 자료형을 반드시 입력해주어야하는 점이 그러하고, 특히 포인터를 사용한다는 점이 그러하다. 아주 예전에 C를 처음 접했을때 포인터를 잘 이해하지 못했던 기억이 있어서 먼저 포인터에 대해서 확실하게 잡고가려고 노력했다. 그 결과 RBtree 구현 과정에서 어렵지 않게 이해하고 구현할 수 있었으나, 그럼에도 작은 실수들이 있었고 디버깅하는 과정에서 조금씩 더 포인터와 가까워 질 수 있었다.

RBtree를 공부하면서 들었던 생각 중 하나는 스스로 짜임새있는 프로그램을 문제없이 구현하는 것이 너무 어렵다는 점이었다. 실제로 RBtree라는 자료구조와 구현 과정을 공부할때 여러 동영상 강의와 블로그, 알고리즘 서적을 보면서도 이해가 쉽지 않았고 이해하고도 스스로 코드를 작성하기엔 버거워서 pseudo-code를 참고하면서 작성하였는데, pseudo-code가 없었다면 훨씬 더 오랜 시간이 걸렸을 것 같다. 아무래도 이 부분은 아직 지식과 경험이 부족한 이유일 것이라고 생각이 되며, 앞으로 계속 공부하고 많은 코딩 경험을 쌓아가다보면 복잡한 구조도 어렵지 않게 구현할 수 있지 않을까 싶다. 다른 한편으론 pseudo-code가 있어서 코드를 작성할 수 있었기에, 앞으로 직접 무언가를 구현할때에도 스스로 pseudo-code를 작성해서 구현하는 것이 문제가 발생할 확률을 줄이고 의도하는대로 잘 구현하는데 도움이 될 것이란 생각도 든다. 또한 어떤 기능을 구현하기 위해 변수와 함수들을 잘 정의하고 구조화하는 것, 즉 내가 만드는 프로그램이 어떤 방식으로 작동하는지 확실하게 이해하고 구현하는 것이 필수적이라는 생각이 들었는데, 이 또한 pseudo-code를 작성하면 자연스럽게 될 수 있을 것 같다.

아무래도 인생 처음으로 제대로 C를 사용하는 것이다보니 같이 공부하는 동기들도 오류들에 부딪혔고, 같이 머리를 맞대고 디버깅한 시간들이 있었다. 조건을 잘못 작성하거나 포인터를 잘못 쓰는 등 다양한 케이스들이 있었지만, 다른 것보다 변수명을 잘못 작성한 경우가 기억에 남는다. 변수에 오타가 있는 것은 아니지만 변수 자체를 다른 변수와 혼동하여 잘못 적은 경우였는데, 오타가 아니다보니 IDE가 잡아주지 못해 디버깅이 어려웠었다. 다양한 변수를 사용하다보니 헷갈려서 다른 변수를 적게 된 케이스로, 변수명을 지을때 이름이 길어지더라도 가능한 한 한눈에 정체를 알아볼 수 있는 이름으로 변수명을 지을 필요성이 있다는 점을 깨달았다.

C는 기계어 수준에 가까운 언어인 만큼 다루기 어려웠지만, 오히려 그래서 컴퓨터와 코드의 동작에 대해서 더 잘 이해하게 되는 것 같다. 그래서 RBTree도 (물론 어려웠지만) 재밌게 구현할 수 있었고, 다음의 커리큘럼들이 기대가 된다.

profile
#코딩 #개발 #몰입 #꾸준함

0개의 댓글