Programming 104

[Qt] github에 push 하기 위한 win-ssh-askpass 대안 qtc-askpass

안녕하세요. github에 push 하기 위해 ssh-key 생성 시 암호를 설정했다면, Qt에서 원격지로 전송할 때 암호창이 나타나지 않아서 bash에서 수동으로 passphrase(암호)를 입력하는 경우 있을 겁니다. 설정창에는 기본으로 win-ssh-askpass 실행파일로 되어 있는데, 파일이 다운로드하거나 찾을 수 없어서 bash로 하는 경우가 있는데, qt에서 지원해 주는 ssh 암호창이 있어 공유해 봅니다. 1. github에 push 할 경우 문제 상황 로컬에서 git을 사용할 때는 원격지 전송이 필요하지 않기 때문에 문제가 없지만, 원격지로 push 하면 아래와 에러가 발생합니다. 특별한 설정을 하지 않았다면, win-ssh-askpass를 찾아 시도하지만, 파일이 없다고..

Programming/Qt 2025.06.08

[Qt] gRPC, Protocol Buffers 사용 시 라이브러리 추가 방법

안녕하세요. 두 개 이상의 프로그램 상에서 구조화된 데이터를 보낼 때 Serialized 해서 네트워크로 보냅니다. 최근에 구글에서 효율적인 데이터를 직렬화와 서비스 간 통신을 가능하게 해주는 기술(gRPC, Protocol Buffers)이 있다고 해서 확인해 보았습니다. 간단하게 내용을 확인하고 Qt에서 라이브러리 추가하는 방법 알아보겠습니다. 1. gRPC와 Protocol Buffers 간략한 개념 1) gRPC 란 gRPC는 Google이 개발한 고성능 오픈소스 원격 프로시저 호출(Remote Procedure Call, RPC) 프레임워크입니다. 서비스 간의 통신을 마치 로컬 함수 호출처럼 수행할 수 있도록 설계했고, 몇 가지 특징이 있습니다. HTTP/2 기반의 고속 전송..

Programming/Qt 2025.05.29

[C++]컨테이너(Container)와 이터레이터(Iterator) 기초 2

안녕하세요 지난 글에는 C++의 컨테이너와 이터레이터가 무엇인지, 어떻게 사용하는지에 대해 알아보았습니다. 이번에는 조금 컨테이너와 이터레이터가 내부적으로 어떻게 동작하는 알아보겠습니다. 1. 컨테이너에 [] 연산자 사용 std::vector를 사용할 때, 우리는 배열처럼 v[i] 형태로 특정 위치의 요소에 매우 편리하게 접근할 수 있습니다. 이유는 연산자 오버로딩(Operator Overloading) 때문입니다. []는 C++ 클래스에서 특별한 함수(멤버 함수)로 직접 구현할 수 있는 연산자 중 하나입니다. 원리를 확인하기 위해, std::vector를 아주 간단하게 흉내 낸 ThingVector라는 클래스를 만들어 보겠습니다. templateclass ThingVector {priv..

Programming/C, C++ 2025.05.23

[C++] 컨테이너(Container)와 이터레이터(Iterator) 기초 1

안녕하세요 이번에는 C++의 개념 중에 컨테이너(Container)와 이터레이터(Iterator)의 기본 정의와 사용법에 대해 알아보겠습니다. 1. 컨테이너(Container)란? 이전 내용에서 몇 번 언급했지만, 정의에 해대서 다시 알아보겠습니다. C++에서 컨테이너는 동일한 타입의 여러 객체(데이터)들을 담는 자료구조라고 생각하면 쉬울 것입니다. 마치 물건을 담는 상자처럼, 컨테이너는 숫자, 문자열, 또는 사용자가 만든 객체들을 보관하고 관리하는 역할을 합니다. C++ 표준 템플릿 라이브러리(Standard Template Library, STL)는 다양한 종류의 컨테이너를 제공합니다. 대표적으로는 다음과 같은 것들이 있습니다. std::vector : 동적으로 크기가 변하는 배열 st..

Programming/C, C++ 2025.05.22

[Qt] C++ 컨테이너 순회, '범위 기반 for' 사용 및 최적화 방법

안녕하세요. Qt/C++로 코딩하다 보면 std::vector나 QList 같은 컨테이너 안의 데이터들을 하나씩 검색 혹은 출력할 때가 있습니다. 예전에는 foreach (또는 Qt의 Q_FOREACH) 같은 방식을 쓰기도 했지만, 요즘 C++에서는 훨씬 더 깔끔하고 효율적인 방법이 있습니다. 바로 '범위 기반 for 루프'입니다. 이것을 사용하면 조금 더 코드가 좋아지는 이유와 Qt 사용자를 팁을 하나 공유해 보고자 합니다. 1. 예전 방식의 foreach, Q_FOREACH 예전에 쓰던 foreach나 Qt의 Q_FOREACH는 특정 컨테이너들을 순회할 때 편리했지만, 몇 가지 불편한 점이 있습니다. 모든 C++ 환경에서 똑같이 돌아가지 않을 수 있었고, 내부 동작이 복잡해서 코드를 읽거나 문..

Programming/Qt 2025.05.14

[C++] 타입 캐스팅 (static_cast, dynamic_cast) 대하여

안녕하세요, 1. C++ 타입 캐스팅 필요성 C++은 타입 시스템을 가지고 있어, 서로 다른 타입 간의 데이터 교환이나 연산을 엄격하게 제한합니다. 하지만 때로는 프로그래머의 의도에 따라 타입을 변환해야 하는 경우가 발생합니다. 예를 들어, 부모 클래스 포인터가 실제로는 자식 클래스 객체를 가리키고 있을 때, 자식 클래스 고유의 멤버에 접근하려면 타입 변환이 필요합니다. 이럴 때 사용하는 것이 바로 타입 캐스팅 연산자입니다. C++ 에는 크게 네 가지의 명시적 타입 캐스팅 연산자가 있습니다. (1) static_cast(표현식) (2) dynamic_cast(표현식) (3) const_cast(표현식) (4) reinterpret_cast(표현식) 각각의 캐스팅 연산자는 사용 목적과 특징이 다르..

Programming/C, C++ 2025.05.10

[C++] 함수 템플릿 기초와 Name Mangling (Name Decoration) 대해 알아보기

안녕하세요. C++로 프로그래밍하다 보면, 비슷한 로직인데 처리하는 데이터 타입만 다른 함수를 여러 개 만들어야 할 때가 있습니다. 예를 들어, 두 개의 정수를 더하는 함수 add_int(int a, int b)와 두 개의 실수를 더하는 함수 add_float(float a, float b) 코드로 나눠져 있다면, 코드가 중복되고 관리하기 번거로울 것입니다. C++은 함수 템플릿(Function Template)이라는 함수 템플릿을 사용하면, 타입에 구애받지 않는 함수 "틀"을 만들어 놓고, 컴파일 시점에 실제 필요한 타입의 함수를 자동으로 생성하게 할 수 있습니다. 이미 알게 모르게 사용하고 있을 수 있지만, 기초 방법과 연계해서 +1 지식을 알아보도록 하겠습니다. 1. 함수 템플릿이란? ..

Programming/C, C++ 2025.05.03

[C++] 연산자 오버로딩(Operator Overloading)에 대해 좀 더 알아보기

안녕하세요. 이번에는 C++의 기능 중 하나인 연산자 오버로딩(Operator Overloading)에 대해 알아보겠습니다. 연산자 오버로딩을 언제 사용하는 거야?라고 할 수 있습니다. 그러나 직접 객체 간 연산(?)을 하지 않는 코드라면 사용하지 않았을 수도 있습니다. 그러나 연산자 오버로딩을 사용하면 사용자 정의 클래스(우리가 직접 만든 타입)에 대해서도 `+`, `-`, `=`, ` 마치 int나 float 같은 기본 타입처럼 객체를 다룰 수 있어 코드의 가독성과 직관성을 크게 높일 수 있습니다. 1. 연산자 오버로딩이란? 함수 오버로딩은 이름이 같은 함수라도 매개변수의 타입이나 개수가 다르면 여러 개 정의할 수 있는 기능이라고 자주 들어 봤을 겁니다. 마찬가지로, 연산자 오버로딩은 기..

Programming/C, C++ 2025.04.29

[C++] using 정의와 추가적인 기능 알아보기

안녕하세요. using 키워드를 쉽게 namespace 활성화로만 사용하고 있다는 생각에, 추가적인 기능에 대해 알아보았습니다. using은 코드의 가독성을 높이고, 특히 네임스페이스 관리와 클래스 상속 관계에서 발생하는 미묘한 문제들을 해결하는 데 중요한 역할을 합니다. 1. using 기본 기능 - 네임스페이스 활성화 C++에서는 이름 충돌을 방지하고 코드를 모듈화 하기 위해 네임스페이스(namespace)를 사용합니다. 예를 들어, C++ 표준 라이브러리의 대부분 기능은 std 네임스페이스 안에 정의되어 있습니다. #include #include int main() { std::cout numbers; return 0;} 매번 std::를 붙이는 것은 번거로울 수 있습니다. 이때 ..

Programming/C, C++ 2025.04.25

[C++] namespace 사용법 읽을거리

안녕하세요. C++ 프로그래밍에서 코드의 규모가 커지거나 여러 라이브러리를 사용할 때 발생할 수 있는 이름 충돌(Name Collision) 문제이 발생하기도 하고, 코드를 논리적으로 구분할 때 namespace를 사용할 텐데요. 조금 알아보겠습니다. 1. namespace란 무엇이고 왜 사용할까? C++ 프로젝트를 진행하다 보면, 내가 만든 함수나 변수 이름이 다른 라이브러리나 팀원이 만든 코드의 이름과 겹치는 경우가 생길 수 있습니다. 예를 들어, print()라는 함수를 여러 곳에서 정의한다면 컴파일러는 어떤 함수를 호출해야 할지 알지 못해 오류를 발생합니다. namespace는 이러한 이름 충돌 문제를 해결하기 위해 도입된 문법입니다. 특정 코드 영역을 고유한 이름 공간(namespace..

Programming/C, C++ 2025.04.23

[C++] 동적 바인딩과 가상 함수에 대한 짧게 읽을거리

안녕하세요. 이번에는 C++ 동적 바인딩과 이를 가능하게 하는 가상 함수 개념에 간단하게 확인해 보겠습니다. 1. 동적 바인딩 (Dynamic Binding) 이란? 동적 바인딩 또는 늦은 바인딩 (Late Binding)은 실행 시점(Runtime)에 호출될 함수를 결정하는 방식입니다. 이는 컴파일 시점에 호출될 함수가 결정되는 정적 바인딩 (Static Binding)과 대조가 되는 개념입니다. C++에서는 주로 가상 함수 (Virtual Functions)를 통해 동적 바인딩을 구현합니다. 2. 가상 함수 (Virtual Functions) 이전 글에서도 한번 설명하였습니다. 가상 함수는 기반 클래스에서 virtual 키워드를 사용하여 선언된 함수입니다. 파생 클래스에서 이 가상 함수를 ..

Programming/C, C++ 2025.04.17

[C++] explicit에 대해 알아두면 좋은 읽을거리

안녕하세요.  C++를 사용하다 보면 "explicit" 키워드를 가끔 보게 됩니다. 이 키워드는 클래스 생성자의 동작 방식을 제어하는 중요한 역할을 하지만, 처음 접하는 분들에게는 다소 낯설게 느껴질 수 있습니다.  이번 내용은 C++의 "explicit" 문법에 대해 조금 알아보려고 합니다.  1. 암시적 형 변환 (Implicit Type Conversion)  "explicit" 키워드를 이해하기 위해서는 먼저 C++의 암시적 형 변환에 대한 이해가 필요합니다. C++에서는 컴파일러가 특정 상황에서 자동으로 자료형을 변환해 주는 암시적 형 변환이 일어납니다.  클래스 타입 인자가 하나인 생성자가 정의되어 있다면, 해당 생성자를 사용하여 다른 타입의 값을 클래스 타입으로 암시적으로 변환할 수 있습니..

Programming/C, C++ 2025.04.11

How to Resolve Warning Messages When Adding Header Files in Qt 6.8.1

Hello,  I'd like to share how to resolve the persistent warning messages that appear when adding header files while using Qt 6.8.1. 1. Warning Message Even when creating a basic Qt widget project, the following warning message appeared (with QMake configuration): D:\project\02_qt\01_error_test01\widget.cpp:2:warning: Included header ui_widget.h is not used directly (fix available)    I thought i..

Programming/Qt 2025.04.08

[C++] 가상 함수에서 조금 알아두면 좋은 간단한 읽을거리(vtable, pure virtual function 포함)

안녕하세요.  C++ 가상 함수에 대해서 조금 알아보려고 합니다. 뭐 virtual 만 붙이면 되는 거 아니야?라고 할 수 있지만, 간단한 원리, vtable 구조, 장단점 등을 조금 알아보겠습니다.  C++에서 가상 함수(virtual function)는 객체 지향 프로그래밍의 다형성(polymorphism)을 구현하는 핵심 개념입니다. 이를 통해 기본 클래스 포인터 또는 참조를 사용하더라도, 런타임에 실제 객체의 타입에 따라 적절한 함수가 호출되도록 만들 수 있습니다.   1. 가상 함수란? — 런타임 다형성의 시작  가상 함수는 기본 클래스에서 virtual 키워드로 선언되며, 파생 클래스에서 재정의(override)할 수 있습니다. 가상 함수 호출은 정적 바인딩(static binding)이 아닌..

Programming/C, C++ 2025.04.05

[C++] 복사 생성자에서 조금 알아두면 좋은 간단한 읽을거리 (깊이 있는 이해)

안녕하세요.   생성자에도 몇 가지 종류가 있는데 그중에 복사 생성자에 대해서 조금 더 알아보겠습니다.  C++에서 복사 생성자는 객체를 복사하여 새로운 객체를 생성할 때 호출되는 특별한 멤버 함수입니다. 복사 생성자를 적절히 사용하는 것은 C++ 프로그래밍의 핵심이며, 특히 객체의 메모리 관리를 이해하는 데 중요합니다. 이 글에서는 복사 생성자의 기본 개념부터 고급 활용 부분까지 살펴보겠습니다.  1. 변수 초기화에 스타일  변수 초기화할 때 C++ 에는 C와 조금 다른 방식이 추가되어 있습니다. 바로 ( ) 괄호입니다. 여기서 명시적(직접) 초기화 방식과 묵시적(암시적) 방식에 따라 조금 차이가 있어서 미리 조금 알고 있으면 도움 될 것이 있어서 적어보았습니다.  int count = 0;int &r..

Programming/C, C++ 2025.04.03

[C++] 생성자(Constructor)에서 조금 알아두면 좋은 읽을거리

안녕하세요.  C++언어를 알고 있는 분이라면, 생성자와 소멸자에 대해서 기본적인 것은 다 잘 알고 있을 거라고 생각합니다. 그중에서 한 번쯤 다시 기억하고 있으면 좋은 것에 대해서 공유해 보겠습니다.   1. 생성자(Constructor)에 관해  생성자(Constructor)라고 하면 기본적으로 객체가 생성될 때 자동으로 호출되는 특수한 멤버 함수입니다. 아래와 같은 기본적인 특징을 가지고 있습니다.  클래스와 같은 이름을 가지며 반환형이 없다. 객체 초기화를 담당한다. 매개변수를 받을 수 있으며, 여러 개의 생성자를 오버로딩할 수 있다.  1) 생성자 인자  생성자 인자가 다르면 디폴트 생성자의 형태도 같아야 합니다. 함수 오버로딩과 비슷할 수 있는데 객체 생성할 때 생성자도 이것을 지켜야 합니다...

Programming/C, C++ 2025.04.01

Visual Studio(VC++)에서 빌드 시 한글 때문에 에러가 발생과 콘솔(디버깅) 창에 한글이 깨져 나올 경우

안녕하세요.  최근에 Qt로 작업하다가 다시 Visual Studio 2022(VC++)로 확인할 것이 있어 설치해서 소스코드를  확인하다가 한글 출력에 이슈가 있어서 확인한 내용을 남깁니다.  이미 다른 분들도 올린 내용이 있지만, 한글 처리 부분에도 여러 가지 경우가 있다 보니 그중에 이와 유사한 경우가 있지 않을까 해서 정리해 보았습니다.  1. 문제 되는 부분 1   VC++ 코딩 중에 간단하게 printf로 한글을 출력을 출력하려고 간단하게 코드를 작성합니다.    확인 삼아 컴파일을 해보니, 아래와 같이 에러가 발생했습니다. 한글만 없으면 문제없이 컴파일이 되었습니다.  "파일에 0x64 오프셋에서 시작하는 문자가 포함되어 있습니다. 이 문자는 현재 원본 문자 집합에서 잘못된 문자입니다(코드 ..

Programming/C, C++ 2025.03.29

[C++] struct와 class 차이

안녕하세요.    AI가 코딩을 대신해 주고 편리함을 주고 있어 긍정적인 일이기도 하지만, 개발자라서 기본을 놓이고 너무 의존만 하는 것 같아서 다시 기본으로 돌아가보자는 생각으로 기초적인 다시 내용들을 정리해보려고 합니다.   프로그램 언어는 어떤 곳에서 사용하느냐에 따라서 Python, Java, Ruby, R 등 여러 가지 언어가 있지만, 임베디드를 개발하는 곳에서는 아직 C와 C++ 이 상당 부분 차지하고 있습니다.   그중에 C언어에서 C++로 넘어왔다면 클래스와 객체지향 등 여러가지 용어를 들어 보았을 것입니다. Class는 C++에서 중요한 역할을 하고 있습니다.  그런데 한번쯤 C++에서 struct와 class가 무슨 차이가 있을까 생각을 했을 수도 있습니다. 왜냐하면, struct 안에..

Programming/C, C++ 2025.03.28

Qt QMap의 iterator와 auto 상식 +1

안녕하세요.   간단하게 QMAP 클래스 사용하다가 iterator방법에 대해서 좀 더 알고 있으면 좋을 것  같아서 간략하게 남겨 보았습니다. 테스트 환경은 Qt 6.8.1입니다.  1. QMap은?  Qt 프레임워크에서 제공하는 데이터 컨테이너 클래스로, 키(key)와 값(value)의 쌍을 저장하는 연관 컨테이너입니다. 이는 정렬된 맵(sorted map) 자료 구조로 구현되며, 키가 자동으로 정렬됩니다.   QMap 사용법은 알고 있으리라 생각되어서 자세한 방법은 넘어가도록 하겠습니다. 간단하게 설명하자면 템플릿(template) 또는 제네릭(generic) 타입으로 변수를 선언하고, 키와 값을 쌍으로 저장하거나 읽으면 됩니다. QMap map;map["Apple"] = 1;map.insert("..

Programming/Qt 2025.03.11