C › RBtree 구현으로 배운점(Week5_Day7)
오늘은 RB_tree 구현이 끝나고 배운 점을 정리해 본다.
문제점
전방 선언
처음 마주했던 오류는 함수의 호출이 함수의 선언 부 보다 앞에 있었기 때문에 발생한 문제였다.
해당 경우에는 해결 방법이 두 가지가 있었다.
- 함수의 원형을 상단부에 전방선언으로 알린다.
- 단순하게 함수의 위치를 호출하는 곳 보다 앞으로 옮긴다.
- header파일에 전방선언을 한다.
2번으로 기능 순으로 정리되어있던 함수의 사이사이에 내가 선언한 자잘한 함수들이 끼워지는게 싫었기 때문에 1번으로 해결을 하였다.
그러다 생긴 고민이 구현부와 선언부를 분리하는 이유가 있을 텐데, 3번을 하는게 좋을까 아니면 1번을 하는게 좋을까 였다.
결론을 먼저 얘기하자면 규모가 작은 단순 구현이 목적이였고 해당 함수를 외부에서 반복적으로 사용할 일이 없었고, 추후 수정할 일도 없기 때문에 1번으로 하는 것이 맞다고 판단했다.
그렇지만 장점과 이유는 이해하고 넘어가야 한다고 생각했다.
- 코드의 가독성.
- 규모가 커짐에 따른 유지보수성.
- 다른 소스파일에서의 재사용성.
- 변경 시 의존성이 없는 소스파일은 컴파일 할 필요가 없는 효율성.
- 기능별 모듈화를 했을 때 테스트 및 개발의 독립성.
static 함수와 변수
오류를 발생시키지는 않았지만 개념이 모호해서 다시 정리 했던 부분이다.
먼저 static함수나 변수와 지역 변수의 메모리에서의 차이를 짚어야 했다. 일반 지역변수는 메모리의 스택 영역에 저장되며, 호출 시에 메모리에 할당 되며 종료시에는 메모리에서 사라진다.
또한 초기화를 하지 않을 경우에는 쓰레기 값을 가질 수도 있다.
반면 static변수의 경우 프로그램 시작 시 생성되어 데이터 메모리 영역에 할당 되고, 종료시 해제 된다.
따로 초기화를 하지 않을 경우에는 자동으로 0으로 초기화되며, 반복적인 할당 및 해제가 발생하지 않기 때문에 메모리 효율성면에서 우위가 있다.
C에서는 static으로 선언을 하게 되면 해당 함수 또는 변수를 선언한 해당 소스파일에서만 사용가능하기 때문에 외부에서도 호출할 함수 외에는 기본적으로 static으로 선언하는 것을 권장한다.
static으로 선언 할 경우 이 함수는 다른 파일에서 사용하지 않는 다는 것을 알 수 있기 때문에, 어디서 사용되었는지 찾을 시간을 줄일 수 있고, 같은 이름의 함수를 여러개의 파일에 선언할 수 있기 때문에 다수의 프로그래머가 참여하는 경우에도 중복되는 함수명으로 인한 문제를 줄일 수 있다는 장점 또한 존재한다.
C코드의 가독성
RB_tree 구현 과정에서 디버깅을 하면서 느낀 점은 가독성이 매우 떨어진다는 것이였다.
이를 보완하기 위한 주석의 필요성을 확실히 느낄 수 있었고, 하나의 함수안에 기능을 다 때려박는 것 보다 기능별 함수로 분리하여 사용하는 것이 오류를 찾을 때 더 유리하다고 느꼈다. 또한 테스트 코드를 읽어보고 먼저 이해를 한 다음 어느 단계에서 에러가 발생하는 것인지 확실히 알 수 있도록 순서를 정해서 코드를 작성하는 과정이 필요하다고 생각했다.