오늘은 양은성 멘토님의 C++ 가이드라인 특강 2시간과 ROS에 대한 학습을 진행했다. 그 중 ROS에 대한 내용은 추후에 한번에 돌아보며 정리하기로 했고, CPP 가이드라인에 대한 내용을 위주로 TIL을 정리한다.
개발환경은 개발 도구, 협업 도구, OS, 플로우 등 개발에 필요한 총체적 집합을 말한다. 개발환경은 팀 단위로 진행하는 프로젝트에서 공동의 목표를 효율적으로 달성하기 위해서 필요한 것이다. 개발환경에 따라 팀의 효율은 크게 상승할수도, 하락할수도 있다.
사람이 프로그래밍 언어를 작성하면, 작성한 언어를 컴퓨터에서 사용할 수 있는 어셈블리어로 변경하는 과정이 필요하다. GCC와 Clang은 이를 수행하는 컴파일러이다. Visual Studio에서느 MSVC라는 컴파일러를 사용하고 있다. 수많은 컴파일러가 존재하지만, GCC와 Clang은 OS에 상관없이 사용할 수 있다는 이점이 존재한다.
GCC는 GNU라이센스(GPL 라이센스)를 사용하고 있다. GNU 라이센스는 소프트웨어는 공개적으로 이루어져야한다는 신념 아래에 만들어진 라이센스로 이를 이용해 만든 프로그램은 상업적으로 사용할 수 있으나 소스코드를 공개해야 하는 규칙이 존재한다. Clang은 Apache License를 따르고 있기에 소스코드를 공개해야할 필요가 없다. 따라서 기업에서는 Clang을 많이 사용하고 있다. 또한, Clang은 GCC에서 지원하는 대부분의 기능과 더불어 코드 분석 도구들도 지원해주고 있다.
# gcc 설치 방법
sudo apt install -y gcc
# Clang 설치 방법
sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
sudo apt install -y libc++-9-dev libc++abi-9-dev
운영체제에서 C++로 코드를 작성한다고 가정했을 때, 컴파일러는 컴파일과 링킹 과정을 수행한다. 컴파일은 프로그래밍 언어를 어셈블리어로 변환하며, 링킹은 이와 유사한 파일들을 순서와 연관성에 맞춰 하나의 exe파일로 도출하는 역할을 수행한다.
빌드 시스템은 컴파일러, 컴파일 도구, 컴파일 가이드 라인, 분석 도구, 프로그램 제작 도구들을 포함한 일련의 프로그램을 완성하기 위한 시스템을 말한다. C++에서는 GCC/Clang과 같은 컴파일러를 통해 단독 컴파일을 수행할 수 있지만, 복잡한 과정들을 위해 Make/CMake를 사용하면 쉽게 프로그램으로 제작할 수 있다. 여기서 Make와 CMake를 빌드 시스템이라 말한다.
CMake를 사용해 코드를 빌드하는 환경을 만들기 위해서는 다음가 같이 프로젝트를 구성하면 된다. CMake에 대한 스크립트인 CMakeLists.txt를 통해 빌드 과정들과 옵션, 환경들을 설정할 수 있다.
/Project
--CMakeLists.txt
--main.cpp
--/build
CMake를 수행하는 과정은 설정에 따라 다르지만 build 폴더로 이동한뒤, cmake 명령어를 수행하면 된다. 해당 과정을 수행하면 build 폴더 안에 main.exe와 같은 최종적인 output을 확인할 수 있다.
팀 단위 개발을 수행할 때는 서로 간 코드를 어떻게 공유하고, 같이 개발할 것인가에 대한 문제가 존재한다. VCS는 협업을 위해 사용되는 도구로 SVN, Git, GitHub 등이 존재한다. VCS는 소스코드에 버전을 부여해서, 코드의 변경 이력을 관리하는 기능은 물론 변경 추적, 병합(Merge)/분기(Branch), 백업(Backup)/회복(Recovery) 기능들을 수행할 수 있다.
코딩 폰트는 코딩에 사용하기에 적합한 폰트를 말한다. 적절한 코딩폰트는 고정폭을 통해 문자간 동일한 폭으로 코드가 깔끔하게 정리되어 가독성이 높아지게 할 수 있다. 또한 I(대문자 i), l(소문자 L), i, 1과 같은 문자들을 구분해 줄 수 있어야된다. 일부 코딩 폰트는 비교문과 같은 두개 이상의 문자를 엮어서 하나의 문자로 변환하는 기능들도 포함하고 있다.
대표적으로 사용하는 코드는 Fira Code가 존재한다. 다양한 코딩폰트가 존재하며, 이를 받은 후 IDE 환경에서 설정해서 폰트를 변경할 수 있다.
개발환경에 대한 개략적인 내용들을 중심으로 수업을 진행했기에 크게 어려움은 없었다.
나는 도커를 통해 환경을 구성하는 것을 좋아한다! 혹시, 강사님도 도커를 자주 사용하실까?
전반적인 개발환경에 대한 내용들을 다뤘기에, 재미있게 구업을 들을 수 있었다. 컴파일러 도구, CMake, VCS처럼 개발에 대한 주요 도구들부터 코딩 폰트와 같이 사소하지만 중요한 내용들이기에 집중해서 볼 수 있었다. 일주일간 양은성 강사님의 수업을 들을 예정이지만, 기대되는 수업이다.
📌 프로그래머스 데브코스 6기 자율주행 인지과정(Perception) 수강 내용을 바탕으로 정리한 TIL 입니다.
📅 Today: 2023. 9.25.