본문 바로가기
알아두면 손해 없는 정보 저장소

Google C++ Style Guide 1

by anothel 2021. 7. 5.

C와 레거시 코드를 다루다가 (CPP의 필요성을 아직 느끼진 못했지만) C++로 리팩터링 하다가 느낀 점을 서술하려 한다.

 

- 다시 펼쳐보는 구글 코드 스타일 규약집

이 주제에 대해서 다룬 책도 있었구나?

 

1. 레거시 지옥(feat. 누가 이런 코드를 허락하였는가)


레거시 코드를 보며 가끔은,

 

회사에서 TF프로젝트를 진행하며, 빠른 개발을 위해 레거시 프로젝트에서 사용하던 쌩 C 파일과 GCC컴파일러로 개발했다. 짧은 설계과 회의 등을 마친 후 해당 기능 구현을 했고, 모든 메모리 누수를 잡았다.(메모리 누수가 너무나도 많았었다.)

JAR파일 배포를 통해 라이브러리를 제공하는 형태의 사업이었다. 내가 맡은 부분은 JNI 인터페이스를 만들어서 JAVA라이브러리와 회사 기반 라이브러리(PKI 관련 암호화 등)를 연결하는 모듈을 만들었다. 메모리 누수를 잡기 위해서 Valgrind를 사용했고, 테스트 코드를 작성했다. 처음엔 리눅스에서 개발을 했고, 이후에는 엔지니어의 손쉬운 테스트를 위해서 윈도로 포팅을 했다. 모든 것을 순조롭게 잘 해결했고, 프로젝트를 완료했다. 그런데 문제가 있었다.

평소 C개발자가 아닌 C/C++ 개발자라고 떠들고 다니던 나는 쌩 C 파일과 GCC컴파일러로 개발하고 있는 부분이 맘에 들지 않았다. C/C++ 개발자인 만큼 Cpp 파일과 G++컴파일러를 사용해야만 할 것 같았다. 그래서 프로젝트를 마친 후  Cpp 파일과 G++컴파일러로 수정을 했다. CentOS 6 버전을 사용하다가 Valgrind를 사용하기 위해서 CentOS 7(으)로 마이그레이션 했었고, yum을 사용하는 데에 문제가 없었다.(CentOS 6는 2020년 11월 30일에 지원 종료됐다.)

사실, 개발 도중에도 시도했었던 적이 있었다. 하지만 굳이 잘되는 코드를 왜 바꿔야 하냐는 질문이 되돌아왔고, 굳이 잘되는 코드를 바꿀 이유는 없었다. 그럼에도 시도해보았다. 왜냐하면, C에서 C++로 마이그레이션 한다면 여러 가지 이점이 있을 것이라고 생각했다.(사실 아직 잘 모르겠다.)

 

2. 변환 완료(feat. 다양한 시행착오)


참 잘했어요, 아직까지는

 

늘 그래 왔듯, 시작은 좋았다. c의 확장자명을 cpp로 수정 후 빌드를 수행했다. 그런데 웬걸? 잘 수행되던 빌드가 수행되지 않았다. 다양한 이유가 있었지만, 하나씩 해결했다. warning과 error를 수정하면 못할 것이 없다. gcc에서 g++로 변환했고 cpp파일 별로 헤더 파일도 새로 만들었다. 클래스를 생성했고, public과 private를 정확하게 나누려고 노력했다. 하지만 문제가 발생했다. 이력상 나름 Google C++ Style Guide를 준수하여 개발한다고 적어놓고선 이걸 왜 하는지를 모르겠던 것이다.

 

3. 혼란(feat. 이거 왜 하는 거지?)


스스로의 논리 속에서 혼란에 빠져버렸다.

 

Cpp로 수정하면 좋을 줄 알았다. OOP개념이 새로 생겼고, 변수 사용이 자유로웠으며, 클래스 개념이 생겼다.(지금 생각난 것이지만 프로젝트 특성상 string을 사용하는 데에 아주 강력한 std::string이 있었다.) 그런데 문제는 이걸 왜 해야 하는 것이다. 지금까지 VSCode와 cpplint Extention(이 익스텐션 개발자에게 너무 감사한다.)을 사용해 추천해주는 대로만 수정을 해왔던 나는 다시 한번 이 프로젝트를 수정하며 회의감이 들었다. 대체 왜 하는지도 모르는 이 작업을 아울러, 지금 잘 돌아가고 있는 코드들을 왜 갈아엎어야 하는지 이해하지 못하고 있었다. 그래서 명분을 찾기 위해서 다시 한번 Google C++ Style Guide를 펼쳐보고 공부하기로 마음먹었다.

 

4. 마무리


그동안 해왔던 작업들은 툴 혹은 cpplint Extention이 하라는 대로만 해왔다. warning이 나면 수정했고 바꾸라면 바꿨다. 왜냐하면 그게 규약이라고 생각했기 때문이다. 그런데 이걸 왜 사용하는지 모르고 사용했던 나는 최근 면접에서 탈탈 털렸었다. 당장 그 많은 규약 중에 어떤 규약이 기억에 남는지 3개만 말해보라고 했을 때 고작, copy right 적는 행위와 헤더 가드를 얘기했고 헤더가드를 제대로 이해했냐는 질문에는 한 번도 헤더 파일 이름을 겹쳐서 써본 적이 없어서 헤더가드에 걸린 적이 없다는 답변을 했다. 옳은 답이긴 하지만, 내가 면접관이었다면 좋게 보진 않았을 것 같다. 그래서 이번에는 제대로 공부해보려 한다. 구글 코딩 규약을 왜 사용하는지에 대해서.

 

728x90