A

JUNGLE 5주차를 마치고 (C, RB TREE)

Campkim 2021. 9. 10. 03:21

오늘로서 4주차에 이어 5주차가 마무리 되었다. 이번주는 지난 4주보다 이론적으로 알게된 부분이 많았고 뜻 깊은 주였다. 이번 주 미션은 C언어를 통해 RBTREE라는 자료구조를 구현하는 것 이었다.

처음 시작할 때 여러가지 어려움이 있었고 걱정이 많이되었다.

 

첫째로, 사용하고 있는 랩탑이 M1이었는데 몇 가지 부분에서 개발환경 셋업에 어려움이 있었다. C가 디버깅이 잘 안된다거나, 필요한 라이브러리 설치가 안된다거나....

이 문제는 한 주가 끝날때까지 나를 괴롭히고 많은 시간을 소모하게 만들었는데, 도대체 왜 안되는지 납득이 안되었는데, 알아가는 과정에서 몇 가지 알게된 개념들이 있었다. CPU 아키텍처, ENDIAN, 컴파일러 등에 대해 알게되었다. 

 

 

둘째로, C언어의 개념이 너무 없었다. 처음에 구현해야하는 테스트 파일과 헤더, c파일이 전혀 이해가 되지 않았다.

도대체 문법이 왜 이런지, 왜 파이썬에서 잘되던 방식인 printf(1) 과 같은 직관적인 출력이 되지 않는지도 납득이 너무 어려웠다. 고맙게도 함께 공부하는 친구가 500page 정도 되는 pdf C언어 책을 올려주어서 2~3일 정도 투자하여 해당 책을 학습을 했다. 원래는 필요한 부분만 읽고 싶었는데, 읽다보니 재밌어서 대부분 학습하게 되었다.

 

사실 RBTREE의 개념을 쉽다고 착각해서 C를 먼저 이해하겠다는 생각을 했는데, RBTREE의 어려움은 자료구조의 컨셉이 아니라 삽입, 삭제와 같은 유지보수라는 점을 미리 알았다면 이러한 생각을 못 했을 것 같다.

 

신기하게도 다 읽고 나서 다시 헤더파일과 테스트 파일을 보니 어떤 의도인지 해석이 되었다. ( 한글을 못 읽다가 읽으면 이런기분일까.. ) 이후에 프로젝트를 진행하는데 상당한 도움이 되었고, RBTREE 의 선행학습 개념인 BST 를 구현할 때, RBTREE의 구현도 미리 준비할 수 있는 토대가 되었던 거 같다. 

 

정말 못 할것 같았는데 많이 배운 것 같다. 이번주차는 할 수 있다는 마음가짐과 앞으로 학습에 대한 자신감도 조금 키워준 한 주였다. 근데 몸이 너무 피곤하다.....

 

알게된 부분이 많은 만큼 휘발되지 않으려면 정리가 필요한데, 키워드만 정리하고 시간이 남거나 정글이 마무리된 이후라도 정리하고싶다. 

 

이번주 주요 학습내용 - 나중에 정리할 것

자료구조

-BST / RBTREE 구현

 

- 아키텍처별 차이점과 같은 언어에서 compiler, library는 왜 다른지 좀 더 찾이볼 것.

- endian 다시 공부해볼 것

 

C언어 - 휘발되지 않도록 해당 내용 한번 더 읽어보자.

 1. 포인터

- 이중포인터 / 상수 포인터 / 포인터 상수 / 구조체 포인터 

- 함수 구현시 포인터를 이용하면 recursion시 전역변수를 사용하지 않을 수 있다.

 2. 동적 메모리 할당

 3. main 과 void, / source파일 헤더파일(.h)  함수의 형

 3. 데이터 세그먼트구조와 각 변수의 life time -> 개략적인 개념을 보았음 조금 더 깊은 이해가 필요하다.

  1. 스택 (local 변수)
  2. 힙(사용자 동적 메모리 할당)  
  3. data영역 (static, global 변수)
  4. Read-Only Data(Const, literal)
  5. 코드영역