전체 글105 [C++ Core Guidelines] I.4 명확한 타입을 사용해서 인터페이스를 만들자 I.4: Make interfaces precisely and strongly typed 이유잘 정의된 타입은 훌륭한 문서입니다. 가독성을 높이고, 컴파일러가 타입이 정확히 쓰였는지 검증할 수도 있고, 쉽게 최적화 할 수도 있습니다. 예시 (나쁜 예)void pass(void* data); // void* 가 뭔지 이 코드만 보고는 의미를 알 수 없습니다pass() 함수를 부를 때 함수의 정의만 보고는 정확히 어떤 타입의 포인터를 전달해야 하는지, *data를 수정하는지도 알 수 없습니다. 모든 포인터 유형은 암시적으로 void*로 변환되므로 실수로 다른 포인터를 전달하기도 쉽습니다.또한, 함수 내부에서 data 를 사용하기 위해 void* 를 보다 정확한 타입으로 static_cast 해야 하는데.. 2024. 5. 9. [C++ Core Guidelines] I.3 싱글톤은 가급적 쓰지 말자 I.3: Avoid singletons 이유싱글톤은 기본적으로 복잡한 전역 변수일 뿐입니다. (I.2 의 경우처럼 함수에 숨겨진 의존성을 주입합니다) 예시 (나쁜 예)class Singleton { // ... 싱글톤 객체가 생성되려면 참 많은 것들이 필요합니다 ... // 제대로 초기화 되었는지, 이미 된 상태인지 등};싱글톤을 구현하는 방법에는 static 멤버를 활용하는 방법, nullptr 을 사용하는 방법 등 여러가지가 있습니다.바로 이것이 문제를 일으킵니다. 알아두기만약 전역 개체가 변경되는 것을 막는 것이 목표였다면, 싱글톤 대신 전역 변수를 const 또는 constexpr로 선언하세요. 예시 (괜찮을 수도 있는 예)X& myX(){ static X my_x {3}; .. 2024. 5. 4. [C++ 23] std::basic_string_view<CharT,Traits>::contains 사용하기 [C++ 23] std::basic_string_view::contains 를 사용하면 특정 문자열이 들어있는지 여부를 쉽게 판단할 수 있습니다.사용을 위해선 #include 헤더를 추가해야 합니다. 사용 예시import std;using namespace std::literals;// 정적 assertion 으로 활용하는 예 - cppreference.comstatic_assert( // bool contains(basic_string_view x) const noexcept; "https://cppreference.com"sv.contains("cpp"sv) == true and "https://cppreference.com"sv.contains("php"sv) == false a.. 2024. 5. 4. [C++ Core Guidelines] I.2 전역 변수는 상수로 만들자 I.2: Avoid non-const global variables 이유일반 전역 변수의 사용은 숨겨진 의존성을 만들고 실행 흐름을 예측하기 여럽게 합니다. 예시 (나쁜 예)struct Data { // ... 엄청 긴 코드 ...} data; // non-const datavoid compute() // 나쁨{ // ... data 사용함 ...}void output() // 나쁨{ // ... data 사용함 ...}위처럼 엄청 긴 코드에서 일반 전역 변수 data 가 여러 함수에 걸쳐 사용되고 있다고 한다면, 누가 최종적으로 data 를 사용했는지 알기가 쉽지 않습니다.함수만 따로 분리해서 테스트하는 유닛 테스팅을 어렵게 만들고, compute().. 2024. 4. 30. [C++ Core Guidelines] I.1 인터페이스를 분명하게 만들자 I.1: Make interfaces explicit 이유인터페이스 규약을 제대로 보여주지 않으면 다른 프로그래머들이 놓치기 십상입니다. 예시 (나쁜 예)int round(double d){ return (round_up) ? ceil(d) : d; // 나쁨 : 감춰진 의존성}round_up 이라는 전역 플래그 변수를 통해 함수의 동작이 결정되고 있습니다.대부분의 사람들은 round() 함수가 어떻게 만들어졌는지 자세히 뜯어보고 싶지 않을 것입니다.round(7.2) 가 어떤 날은 8 이 나오고 어떤 날은 7 이 나오게 하는 것보단 명백하게 반올림만 하는 것이 훨씬 깔끔합니다. 알아두기물론 디버그 옵션, 멀티 플랫폼 빌드와 같이 C++ 세계에선 매크로를 통해 외부에서 실행 흐름을 통제하는.. 2024. 4. 30. [C++ Core Guidelines] P.12, P.13 도구를 잘 활용하자 P.12: Use supporting tools as appropriateP.13: Use support libraries as appropriate 이유컴퓨터가 여러분 대신 해줄 수 있는 일이 많이 있습니다. 사람은 지루한 작업을 반복적으로 수행하는 것보다 더 나은 일을 해야 합니다.라이브러리를 만드는데 사용되는 비용(시간, 노력, 돈 등) 은 여러 사용자가 공유할 수 있습니다. 널리 사용되는 라이브러리는 개별 애플리케이션보다 최신 상태로 유지되고 새로운 시스템으로 이식될 가능성이 더 높고 문서화도 잘 되어있습니다.널리 사용되는 라이브러리에 대한 지식은 다른/향후 프로젝트에서 시간을 절약할 수 있기 때문에 적절한 라이브러리가 있으면 이를 사용하는 것이 좋습니다. 알아두기아래와 같은 시중의 코드 분석기.. 2024. 4. 26. 이전 1 ··· 8 9 10 11 12 13 14 ··· 18 다음