전체 글 280

C++ 개발자를 위한 Go 언어 요약 정리

C++ 개발자 분이 두꺼운 Go 언어책 모두를 다시 보실 필요 없이 C++ 언어 기반에서 추가로 이해하면 좋은 핵심 내용들만 간추렸습니다. Go 언어 특징 Go는 정적 컴파일 언어. 컴파일 과정을 거쳐 실행 파일을 미리 만들어야 하지만 실행 속도가 빠릅니다. Go는 강 타입 언어입니다. 조금 번거롭지만 타입에 따른 문제점이 없습니다. Go 언어는 가비지 컬렉터 제공 가비지 컬렉터 Go 언어는 가비지 컬렉터를 제공합니다. 매우 발전된 형태의 가비지 컬렉터를 제공해 성능 손실이 크지 않습니다. 패키지 명 == 폴더 명 Go 모듈 생성 go mod init 명령을 실행하여 모듈 생성 예) go mod init myproject/hello Go 모듈을 생성하면 go.mod 파일이 생성됩니다. Go 빌드 go t..

[UE] 언리얼 엔진 AsyncTask 사용

AsyncTask 언리얼 엔진에는 코드를 비동기적으로 실행할 수 있는 AsyncTask라는 유용한 기능이 있습니다. 이 기능은 지정된 스레드에서 특정 코드를 실행하는 방식으로 작동하며, 주로 게임 스레드를 차단하지 않고 즉시 실행하기에는 작업이 너무 무거울 때 사용됩니다. 또한 멀티스레딩으로 인해 발생하는 문제, 특히 한 스레드에서 다른 스레드에서 사용 및/또는 수정하려는 프로퍼티에 액세스하는 문제에 대한 해결책을 제공합니다. AsyncTask(ENamedThreads::AnyThread, []() { // 이 코드는 게임 스레드를 멈추지 않고 비동기적으로 실행됩니다. }); 예를 들어 비동기 작업에 대한 중첩 호출을 만들 수도 있습니다: AsyncTask(ENamedThreads::AnyThread, ..

[UE] BindWidget으로 C++와 UMG 연결

C++에서 Blueprint으로 생성된 위젯을 어떻게 제어할 수 있을까요? 이에 대한 답은 BindWidget 메타 속성입니다. UPROPERTY(BlueprintReadWrite, meta = (BindWidget)) class UTextBlock* TitleLabel; UPROPERTY(BlueprintReadWrite, meta = (BindWidget)) class UImage* IconImage; 다음은 예제 코드입니다. BindExample.h #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "BindExample.generated.h" UCLASS(Abstract) class UBindExampl..

[C++] 유용한 C++ 기능 - attribute specifier

C++11부터 도입된 attribute specifier(속성 지정자)는 코드의 컴파일러에 대한 추가 정보를 제공하는 데 사용됩니다. 이를 통해 개발자는 특정 컴파일러에 맞춰진 속성을 지정하거나, 코드에 대한 최적화 및 다른 목적으로 사용자 정의 속성을 추가할 수 있습니다. Attribute specifier는 대괄호 [[와 ]]로 묶여진 형태로 사용됩니다. 아래는 attribute specifier의 간단한 예제입니다: [[noreturn]] void SomeFunc() { ... return;// 함수 내부에 리턴문이 있으면 컴파일 에러가 발생합니다. // 중간에 리턴문으로 인해 의도하지 않게 함수의 모든 코드를 // 실행할 수 없는 상황을 막는데 용이합니다. ... } [[nodiscard]] bo..

[C++] 유용한 C++ 기능 - brace initialization

기본 초기화의 문제점 // #1. 멤버 변수 배열은 초기화할 수 있는 방법이 없다. struct A { int arr[100]; }; // #2. POD 동적 할당을 초기화할 수 있는 방법이 없다. char* buff = new char[100]; // #3. STL 컨테이너를 초기화할 수 없다. std::vector vec; // #4. 타입에 따라 초기화 구문이 일관적이지 않다. int i(10); // 10으로 초기화 A a(); // a는 기본 생성자로 초기화?? A 타입을 리턴하는 함수 선언?? C++11에서 도입된 중괄호 {}를 사용한 초기화 방식을 "brace initialization" 또는 "uniform initialization"이라고 부릅니다. int myInt = 42; // 기존..

[C++] 유용한 C++ 기능 - structured binding

C++17에서 도입된 structured binding은 복합적인 데이터 구조를 손쉽게 풀어낼 수 있는 기능을 제공합니다. 이를 통해 배열, 튜플, 구조체 등에서 멤버를 간단하게 추출하여 사용할 수 있습니다. Structured binding은 다음과 같은 문법을 사용합니다: auto [변수1, 변수2, ...] = 표현식; 여기서 표현식은 풀어낼 데이터 구조를 나타내며, 변수1, 변수2 등은 구조체나 튜플의 각 요소에 대응됩니다. 예를 들어, 튜플을 사용한 structured binding은 다음과 같이 보입니다: #include #include int main() { std::tuple myTuple(42, 3.14, "Hello"); auto [a, b, c] = myTuple; std::cout

[C++] 유용한 C++ 기능 - if / switch init statement

if / switch init statement 로컬 변수의 생명주기가 블럭과 같도록 합니다. if 문 이후에 x 변수가 잘못 사용되는 위험을 방지하고 코드의 의도를 명확히 합니다. if (int x = getX(); x > 0) { // x가 0보다 큰 경우에 실행되는 코드 // x를 여기서 사용할 수 있음 } else { // x가 0 이하인 경우에 실행되는 코드 } 위의 예제에서 getX() 함수는 변수 x를 초기화하는데 사용됩니다. 이렇게 하면 if 블록 내에서만 x가 유효하게 됩니다. 다음은 switch에서 사용하는 예시입니다. switch (int value = getValue(); value) { case 1: // value가 1인 경우에 실행되는 코드 break; case 2: // va..