목록Technology/C++ (15)
logbook

1. C++ 진짜 싫다아니 대체 이런 언어를 왜 쓰는 거죠.프레임워크를 설치하든, 코드를 짜든, 문법 배운 거 실습을 하든 도통 뭘 하든 간에 제대로 돌아가는 꼴을 못 봤습니다.버전은 어마어마하고, 책임은 몽땅 프로그래머한테 떠넘기고, OS마다 컴파일러마다 파편화는 아찔한 수준이고, 패키지든 프레임워크든 뭐 하나 설치만 하면 에러부터 뿜어대고...Catch2요?아니 유닛 테스트를 위해서 쓸 수 있는 좋은 프레임워크라고 소개하면 뭐 합니까, 설치해서 쓸려고 해도 에러만 토해내는데!초보자 입장인 저에게는 C++이 너무나도 싫습니다. 문법 괴팍하다고 한동한 멀리하던 Python이 선녀로 보이는 수준입니다.아니 패키지 설치하라고 할 때마다, 새로운 문법을 하나씩 배울 때마다 늘 새롭고 재밌지가 않아요. 겁부터 ..

1. 템플릿템플릿은 C++에서 제네릭을 구현하기 위해 사용되는 문법입니다.타입을 고정시키지 않고 경우에 따라 다양한 타입의 값을 받아 동작시킬 수 있기 때문에 보다 유연하고, 재사용성이 높은 코드를 작성하는 것이 가능해집니다.template struct AutoBrake { AutoBrake(const T& publish) : publish{ publish } {} void observe(const SpeedUpdate& cd) {} void observe(const CarDetected& cd) {} void set_collision_threshold_s(double x) { collision_threshold_s = x; } double get_speed_..

1. 상수상수는 변수와 달리 고정된 값을 다루기 위해 사용되는 개념입니다.상수로 정의된 값은 코드가 실행되는 동안 변경되지 않는다는 것을 보장할 수 있기 때문에 데이터의 신뢰성을 높일 수 있습니다.이 때문에 원주율(PI), 랜덤 확률 등과 같이 코드 내에서 고정적으로 사용되는 공통 값을 다룰 때는 상수로 정의하여 가독성을 높이는 방안을 주로 사용합니다. C++에서는 이 상수를 다룰 때 const와 constexpr이라는 두 가지 접근성을 보장합니다.여기서는 const와 constexper이 어떻게 다른지 간략히 살펴봅니다. 2. const먼저 const는 변수와 함께 사용되며 const는 함수나 생성자를 정의할 때는 사용되지 않습니다.const를 통해 정의된 값은 컴파일 타임 또는 런타임에 값이 결정됩..

1. 메모리 주소와 포인터포인터는 값의 복사가 아닌 값의 참조를 기반으로 동작합니다.C++는 기본적으로 값을 다룰 때 복사 연산(Call by Value)을 사용하기 때문에 원본 값의 오염을 방지하고 메모리 낭비를 방지하기 위해서는 포인터에 대한 이해가 매우 중요합니다.포인터 변수에는 값 그 자체가 아닌, 값이 저장된 메모리 상의 주소를 담을 수 있습니다. 메모리 주소를 담을 수 있는 변수가 존재한다면, 포인터 변수에 담을 메모리 주소값 그 자체를 표현하는 것도 가능해야 할 것입니다.이러한 작업을 수행하기 위해 & 연산자와 * 연산자가 등장합니다. 2. & 연산자와 * 연산자로 포인터 다루기포인터 변수는 값이 아닌 값의 주소를 저장하므로, 일반적인 변수와 다르게 취급해야 합니다.포인터 변수를 선언할 때..

1. non-type templateC++에서 제네릭 함수를 구현하기 위해 사용되는 template은 아래와 같이 호출 시 타입을 지정하여 호출하는 것이 기본적인 사용법입니다.templateT sum(T n1, T n2) { return (n1 + n2);}int main() { int x = sum(1, 2); printf("%d\n", x); return 0;}제네릭은 사용자가 지정한 타입에 맞게 유동적으로 연산을 수행할 수 있으며 코드의 재활용성을 높이고, 다양한 상황에 맞는 유연한 대응이 가능해 활용도가 높은 고급 기능 중 하나입니다.non-type template은 위 코드와 같이 제네릭 함수를 사용할 때 기호를 사용해 지정할 타입을 명시해 주는 것 대신, 암시적으로 인자..

1. strcpy( )strcpy( )는 문자열을 복사하는 함수 중 하나로, 널 문자(\0)을 만날 때까지 src에서 dest로 복사하는 함수입니다.문자열 전체를 복사하지만, 길이 제한이 없어서 버퍼 오버플로우가 발생할 위험이 있습니다.char buffer[100];std::strcpy(buffer, "Hello, world!"); 2. strncpy( )strcpy( ) 함수와 달리 strncpy( ) 함수는 지정된 길이만큼만 복사하는 것이 가능합니다.이 때문에 strcpy( )보다 더 안전하게 사용할 수 있지만, n바이트에 도달할 때까지 복사를 멈추지 않기 때문에 널 문자(\0)를 수동으로 넣어주어야 합니다.char buffer[100];std:strncpy(buffer, "Hello, world..

1. 함수C++에도 코드 재활용 수준과 가독성을 높여주는 함수가 존재합니다.함수는 데이터를 입력받으면 이를 활용해 특정한 기능을 수행한 뒤, 적절하게 가공된 출력을 하는 역할을 수행합니다.여기서 데이터의 입력은 '매개변수', 데이터의 출력은 '반환 값'이라는 용어로 칭합니다.매개변수와 반환 값은 존재하지 않을 수도 있으며, 그 종류와 개수도 무궁무진합니다.반복적으로 사용되는 코드의 일부분을 함수로 처리하면 동일한 기능을 수행해야 할 때 그 함수를 '호출'하면 되므로, 코드의 가독성과 재활용성을 높여줄 수 있습니다.함수의 이름이 곧 함수이 기능을 의미합니다.이 때문에 함수를 호출하는 것만으로도 그 함수의 실제 내용물을 모르더라도 어떠한 기능이 수행될 것인지를 쉽게 파악할 수 있습니다.이러한 점 덕분에 OO..

1. C++의 배열이제 C++ 내부에서 배열을 어떻게 다루는지 알아보겠습니다.정수형 변수에 1이라는 값을 더하면, 변수의 값이 1만큼 올라갑니다.하지만 포인터 변수는 다르죠.포인터 변수에 1이라는 값을 더하면 메모리 주소가 달라집니다.만약 포인터 변수의 타입이 double이라면, double은 8byte 크기이므로, 값이 더해졌을 때 8byte만큼 올라갈 것입니다.#include using namespace std;int main() { double* dp = new double; cout 그렇다면 C++에서 포인터가 배열을 가리킨다면 어디를 가리킬까요?위와 같이 단순히 하나의 값만 다루는 변수라면 문제가 없지만, 다들 아시다시피 배열을 여러 개의 값을 연속적으로 저장해 다루는 방식의 자료구조..