본문 바로가기

C++26

[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.
[C++ Core Guidelines] P.11 지저분하게 코딩하지 말고 캡슐화하자 P.11: Encapsulate messy constructs, rather than spreading through the code 이유지저분한 코드는 버그를 숨길 가능성이 높고 유지보수가 어렵습니다. 인터페이스를 만들면 사용하기 쉽고 안전합니다.  예시 (나쁜 예)int sz = 100;int* p = (int*) malloc(sizeof(int) * sz);int count = 0;// ...for (;;) { // ... x 값을 계속 입력받고, 파일 끝(EOF)에 도달하면 루프를 종료하는 코드 ... // ... x 값이 정상적인지 검증하는 코드 ... if (count == sz) p = (int*) realloc(p, sizeof(int) * sz * 2); .. 2024. 4. 26.