본문 바로가기

개발/C++ (98,03,11,14,17,20,23)23

Modern C++ : dynamic heap memory allocation (98, 11, 14) 동적 힙 메모리 할당 (Dynamic Heap Memory Allocation) 개요C++에서 메모리는 크게 스택(Stack)과 힙(Heap) 두 영역으로 나뉩니다. 동적 메모리 할당은 프로그램 실행 중에(런타임) 필요한 만큼의 메모리를 힙 영역에서 할당받아 사용하는 방식입니다. 컴파일 시점에 크기를 알 수 없거나, 객체의 생명주기를 특정 범위(scope)를 넘어서까지 제어하고 싶을 때 유용합니다.반면, 함수 내에 선언된 일반 변수들은 스택에 저장되며, 해당 함수가 종료되면 자동으로 메모리에서 해제됩니다. 동적으로 할당된 힙 메모리는 프로그래머가 delete 키워드를 사용하여 명시적으로 해제하기 전까지 계속 유지되므로, 메모리 관리에 각별한 주의가 필요합니다. C++ 버전별 주요 키워드 도입 시기C++9.. 2025. 8. 14.
Modern C++ : pointer and address (98, 11) 포인터와 주소 (Pointer and Address) 개요C++에서 포인터(pointer)와 주소(address)는 메모리를 직접 제어하고 데이터를 효율적으로 관리하기 위한 핵심 개념입니다. 모든 변수는 메모리 상의 특정 위치에 저장되며, 이 위치를 나타내는 값이 바로 '주소'입니다. '포인터'는 이러한 메모리 주소를 값으로 가지는 특별한 변수입니다.이 문서를 통해 변수의 주소를 얻는 방법, 포인터를 선언하고 사용하는 방법, 그리고 포인터를 통해 원본 변수의 값을 변경하는 '역참조(dereferencing)'에 대해 알아봅니다. C++ 버전별 주요 키워드 도입 시기C++98/03: 포인터의 기본적인 개념(*, &)이 이미 존재했습니다.C++11nullptr: 0이나 NULL 대신 포인터가 아무것도 가리키.. 2025. 8. 13.
Modern C++ : const reference and value semantics (98, 11) const 참조와 값 의미론 (const Reference and Value Semantics) 개요C++에서 함수에 인자를 전달하는 방식은 프로그램의 성능과 안정성에 큰 영향을 미칩니다. 특히 const 참조를 사용하는 것은 C++ 프로그래머가 반드시 이해해야 할 중요한 개념입니다. 이 문서는 값에 의한 전달(pass-by-value)과 참조에 의한 전달(pass-by-reference), 그리고 const 참조를 사용한 전달 방식의 차이점과 장점을 설명합니다.값 의미론 (Value Semantics): 함수 호출 시 인자의 복사본을 만들어 전달합니다. 원본 데이터는 함수 내에서 변경되지 않으므로 안전하지만, 객체가 클 경우 복사 비용이 발생하여 성능 저하의 원인이 될 수 있습니다.참조 의미론 (Ref.. 2025. 8. 12.
Modern C++ : string vs std::string vs std::array<char, N> (98, 11, 17) 문자열 : c-style string vs std::string vs std::array vs std::string_view 개요C++에서는 문자열을 다루는 여러 가지 방법을 제공합니다. 이 문서에서는 전통적인 C-style 문자열과 모던 C++에서 권장되는 std::string, 고정 크기 문자열을 위한 std::array, 그리고 C++17에 추가된 std::string_view의 특징과 차이점을 비교 설명합니다. C++ 버전별 주요 키워드 도입 시기C++98: std::string (Standard Template Library의 일부로 표준화)C++11: std::array (고정 크기 배열 컨테이너)C++17: std::string_view (문자열에 대한 소유권 없는 뷰) 내용 설명1. C-s.. 2025. 8. 11.
Modern C++ : array vs std::array (98, 11) 배열 : C-style array vs std::array 개요C++는 C 언어에서 파생되었기 때문에 C-style 배열을 지원합니다. 하지만 C-style 배열은 포인터로의 암시적 변환(decay) 특성 때문에 크기 정보를 잃어버리기 쉽고, 경계 검사를 지원하지 않아 메모리 관련 버그를 유발할 수 있습니다. C++11부터 도입된 std::array는 이러한 단점을 보완한 현대적인 C++의 고정 크기 배열 컨테이너입니다. 이 문서에서는 두 배열 타입의 차이점과 std::array의 장점을 설명합니다. C++ 버전별 주요 키워드 도입 시기C++98/03: C-style 배열 사용.C++11: std::array 도입. 내용 설명C-style array특징:컴파일 시간에 크기가 결정되는 고정 크기 배열입니다.. 2025. 8. 10.
Modern C++ : anonymous namespace (98, 11, 17) 익명 네임스페이스 : anonymous namespace 개요익명 네임스페이스(Anonymous Namespace)는 이름 없는 네임스페이스를 정의하여 내부의 변수나 함수를 해당 파일 내에서만 사용하도록 제한하는 기능입니다. 이는 C 스타일의 static 키워드를 대체하여 외부 연결(External Linkage)을 막고 내부 연결(Internal Linkage)을 갖도록 하는 현대적인 C++ 방식입니다. C++ 버전별 주요 키워드 도입 시기C++98namespace 키워드 도입 : 익명 네임스페이스 (소스 파일 단위 가시성 제공)static 키워드 : 전역 static 함수·변수 (링크 단계에서 내부 연결성 제공)C++11constexpr 변수 (컴파일 타임 상수)C++17inline constexpr.. 2025. 8. 9.
Modern C++ : C-Style static function (98, 11) C-Style 정적 함수 (static function) 개요C-Style static 함수는 선언된 소스 파일 내에서만 접근할 수 있는 내부 연결(internal linkage)을 갖는 함수입니다. 즉, 다른 소스 파일에서는 이 함수를 호출할 수 없으며, 마치 해당 파일의 비공개(private) 헬퍼 함수처럼 동작합니다. 이를 통해 전역 이름 공간(global namespace)의 오염을 방지하고, 여러 파일에서 동일한 이름의 함수를 사용하더라도 이름 충돌(name collision)을 피할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98 이전 (C언어로부터 계승): static 키워드를 사용하여 파일 범위의 함수와 변수에 내부 연결을 지정하는 기능은 C언어에서부터 존재했으며, C++ 초기.. 2025. 8. 8.
Modern C++ : static local variables (98, 11) 정적 지역 변수 : Static Local Variables 개요C++에서 함수 내부에 static 키워드를 사용하여 선언된 변수를 정적 지역 변수(Static Local Variable)라고 합니다. 이 변수는 일반적인 지역 변수와 달리, 프로그램이 시작될 때 생성되어 종료될 때까지 파괴되지 않으며, 함수 호출이 끝나도 그 값을 계속 유지합니다. C++ 버전별 주요 키워드 도입 시기C++98: static 키워드 자체는 C++ 초기 버전부터 존재했으며, 정적 지역 변수의 개념도 이때부터 사용되었습니다.C++11: 정적 지역 변수의 초기화가 스레드에 안전(thread-safe)하도록 보장되었습니다. 여러 스레드에서 동시에 해당 함수에 접근하더라도 변수는 정확히 한 번만 초기화됩니다. 내용 설명정적 지역 .. 2025. 8. 7.
Modern C++ : const vs constexpr (98, 11, 14, 17, 20) 상수와 상수 표현식 : const vs constexpr 개요C++에서 const와 constexpr는 모두 상수를 정의하는 데 사용되지만, 초기화 시점과 컴파일 타임 평가 여부에서 중요한 차이가 있습니다. const는 런타임에 초기화될 수 있는 읽기 전용 변수를 선언하는 반면, constexpr는 컴파일 타임에 값이 결정되는 진정한 의미의 상수를 선언하여 컴파일러 최적화와 타입 시스템에 더 많은 정보를 제공합니다. C++ 버전별 주요 키워드 도입 시기C++98: const 키워드를 사용하여 읽기 전용 변수를 선언했습니다.C++11: constexpr 키워드가 도입되어, 변수나 함수가 컴파일 타임에 평가될 수 있음을 명시적으로 나타낼 수 있게 되었습니다.C++14: constexpr 함수의 제약이 완화되.. 2025. 8. 6.