반응형

공부/C++ 32

유니티를 개발자를 위한 언리얼 엔진 가이드

게임엔진은 크게 C++을 이용하는 언리얼 엔진과 C#을 이용하는 유니티 엔진으로 나뉘어진다. 둘 다 PC에와 모바일 게임에서 사용되지만, 주로 PC 게임의 개발은 언리얼엔진에서 이루어지며, 모바일 게임은 유니티에서 보다 활발하게 이루어진다고 본다. 하지만 유니티도 하고 싶고, 언리얼을 하고 싶은 사람이 당연있을 것이다. 언리얼에서는 이런 사용자를 위해 유니티를 개발하다 온 개발자들을 위해 가이드를 제시한다. https://docs.unrealengine.com/4.27/ko/Basics/UnrealEngineForUnityDevs/ 유니티 개발자를 위한 언리얼 엔진 4 유니티 사용자분들의 빠른 적응을 도울 수 있도록 유니티 지식을 UE4 로 옮겨봅니다. docs.unrealengine.com 문서 정리가..

공부/C++ 2023.06.18

반복자(iterator)란?

1. 이터레이터란? C++에서 이터레이터는 배열, 벡터, 목록 또는 맵과 같은 컨테이너의 요소를 탐색하고 액세스할 수 있는 객체입니다. 컨테이너의 요소를 순차적으로 반복하여 요소 읽기, 수정 또는 제거와 같은 작업을 수행할 수 있는 방법을 제공합니다. 이터레이터는 컨테이너의 요소에 액세스하기 위한 일반화된 인터페이스 역할을 하며, 기본 데이터 구조의 특정 세부 사항을 추상화합니다. 컨테이너 유형에 관계없이 요소를 탐색하고 상호 작용할 수 있는 일관된 방법을 제공합니다. 2. 이터레이터의 종류 표준 C++ 라이브러리는 다양한 기능을 갖춘 여러 유형의 이터레이터를 제공합니다: 입력 이터레이터: 이러한 이터레이터는 컨테이너의 요소에 대한 읽기 전용 액세스를 정방향으로 허용합니다. 값을 읽고 시퀀스에서 앞으로 ..

공부/C++ 2023.06.12

전방선언(Forward Declaration)이란?

1. 전방선언이란? 프로그래밍에서 전방 선언은 식별자(예: 클래스, 함수 또는 변수)의 전체 정의를 제공하기 전에 그 존재를 선언하는 문입니다. 이를 통해 프로그램은 식별자가 완전히 정의되거나 구현되기 전에 식별자를 참조할 수 있습니다. 전방 선언은 주로 식별자를 사용하기 전에 선언해야 하는 C 및 C++에서 사용됩니다. 전방 선언의 주요 목적은 프로그램의 여러 부분 간의 종속성을 해결하거나 순환 종속성을 끊는 것입니다. 또한 전방 선언을 제공하면 컴파일러가 식별자의 존재와 기본 세부 정보를 알 수 있으므로 전체 정의가 제공되기 전에 특정 컨텍스트에서 프로그램을 사용할 수 있습니다. 이를 통해 코드를 유연하게 구성할 수 있으며 두 개 이상의 엔티티가 서로 참조하는 상황을 극복하는 데 도움이 됩니다. 2...

공부/C++ 2023.06.12

Nan(Not A Number)란?

1. Nan이란? '숫자가 아님'의 약자인 NaN은 컴퓨팅 및 프로그래밍에서 정의되지 않았거나 표현할 수 없는 숫자 연산 결과를 나타내기 위해 사용되는 특수 값입니다. NaN 값은 부동 소수점 산술이나 오류, 유효하지 않은 결과를 나타내는 데 사용됩니다. NaN은 수학적으로 연산이나 계산에서 정의되지 않았거나 수치로 표현할 수 없는 결과가 나올 때 이를 나타내는 데 사용됩니다. 이는 결과가 의미가 없거나 유효하지 않다는 신호로 사용됩니다. 예를 들어, 0을 0으로 나누거나 음수의 제곱근을 구하면 이러한 연산에는 잘 정의된 수치 결과가 없기 때문에 NaN이 생성됩니다. 2. Nan의 발생 원인 잘못된 산술 연산: 0으로 나누기, 음수의 제곱근 구하기, 양수가 아닌 숫자의 로그를 구하면 모두 NaN이 될 수..

공부/C++ 2023.06.12

L-Value와 R-Vaule란?

1. L-Value와 R-Value C++에서 L-Value는 객체를 지정하는 표현식이며 할당 연산자의 왼쪽에 사용할 수 있습니다. R-Value는 객체를 지정하지 않는 표현식으로, 할당 연산자의 왼쪽에 사용할 수 없습니다. L-Value: L-Value은 컴퓨터 메모리에서 특정 주소를 가진 메모리 위치 또는 객체를 나타내는 표현식을 말합니다. 값이 변수 또는 메모리 위치에 할당되는 할당 표현식의 왼쪽을 나타냅니다. L-Value은 변수, 객체 또는 역참조된 포인터일 수 있습니다. L-Value은 지정된 메모리 위치에 저장된 값을 읽거나 쓰는 데 사용할 수 있습니다. R-Value: R-Value은 임시 값 또는 특정 메모리 위치가 없는 값을 나타내는 표현식을 말합니다. 이는 할당 표현식의 오른쪽을 의미..

공부/C++ 2023.06.11

Boost 라이브러리란?

1. Boost 라이브러리란? Boost 라이브러리는 C++ 프로그래밍 언어의 기능을 확장하고 보강하는 고품질의 동료 검토를 거친 오픈 소스 C++ 라이브러리 모음입니다. 개발자가 보다 효율적이고 안정적이며 이식 가능한 C++ 코드를 작성하는 데 도움이 되는 다양한 구성 요소와 도구를 제공합니다. 2. Boost 라이브러리의 특징 광범위한 기능: Boost는 다음을 포함하되 이에 국한되지 않는 광범위한 기능을 다룹니다: 컨테이너: Boost는 표준 C++ 컨테이너의 기능을 확장하는 다중 인덱스 컨테이너 및 순환 버퍼와 같은 추가 컨테이너 유형을 제공합니다. 알고리즘: Boost는 정렬, 검색, 숫자 계산과 같은 작업을 위한 알고리즘을 제공하여 효율적이고 최적화된 구현을 제공합니다. 스마트 포인터: Boo..

공부/C++ 2023.06.10

표준 템플릿 라이브러리(STL: Standard Template Library)란?

1. 표준 템플릿 라이브러리(STL: Standard Template Library)란? 표준 템플릿 라이브러리(STL)는 C++용 일반 프로그래밍 도구 세트를 제공하는 컨테이너 클래스, 알고리즘 및 이터레이터 라이브러리입니다. STL은 C++ 표준 라이브러리의 확장으로 만들어졌으며 C++98 출시 이후 언어의 일부로 포함되었습니다. 2. STL의 구성 요소 STL은 세 가지 주요 구성 요소로 나뉩니다: 컨테이너(Containers): 컨테이너는 데이터를 저장하고 구성하는 방법을 제공하는 클래스입니다. STL은 벡터, 리스트, 맵, 집합 등 여러 컨테이너 클래스를 제공합니다. 이러한 컨테이너는 서로 다른 특성을 가지고 있으며 다양한 상황에서 사용하도록 설계되었습니다. 예를 들어 벡터는 무작위로 액세스해야..

공부/C++ 2023.04.06

C++ 언어의 장점은 무엇일까?

C++는 강력하고 널리 사용되는 프로그래밍 언어로 다른 언어에 비해 몇 가지 장점이 있습니다. C++의 주요 장점은 다음과 같습니다: 효율성: C++는 성능에 고도로 최적화된 컴파일 언어입니다. 저수준 메모리 조작과 하드웨어 직접 액세스가 가능하여 게임 개발, 운영 체제, 임베디드 시스템과 같이 리소스를 많이 사용하는 애플리케이션에 널리 사용됩니다. 이식성: C++ 코드는 Windows, Linux, macOS는 물론 iOS 및 Android와 같은 모바일 디바이스를 포함한 다양한 플랫폼에서 실행되도록 컴파일할 수 있습니다. 따라서 C++는 크로스 플랫폼 개발을 위한 다목적 선택입니다. 유연성: C++는 다중 패러다임 언어이므로 절차적 프로그래밍, 객체 지향 프로그래밍, 일반 프로그래밍 등 다양한 스타일..

공부/C++ 2023.03.24

C언어와 C++언어의 차이점

C와 C++는 소프트웨어 개발에 일반적으로 사용되는 두 가지 프로그래밍 언어입니다. C와 C++는 몇 가지 유사점을 공유하지만 구문, 기능 및 사용법 측면에서 몇 가지 주요 차이점도 있습니다. 구문: 예를 들어, C++는 함수 및 연산자 오버로딩을 허용하므로 단일 함수나 연산자가 사용되는 컨텍스트에 따라 다른 의미를 가질 수 있습니다. 또한 C++에는 함수 및 기타 데이터 멤버를 포함할 수 있는 사용자 정의 데이터 유형인 클래스에 대한 지원도 포함되어 있습니다. 기능: C++에는 객체 지향 프로그래밍(OOP) 구조, 템플릿, 예외 및 표준 라이브러리 구성 요소와 같이 C에서는 사용할 수 없는 여러 기능이 포함되어 있습니다. OOP는 개발자가 데이터와 동작을 캡슐화하는 객체로 코드를 구성할 수 있는 프로그..

공부/C++ 2023.03.24

Friend 키워드란?

1. Friend 키워드란? C++에서 friend 키워드는 클래스의 멤버 함수나 변수에 대한 접근 권한을 다른 클래스나 함수에 부여할 때 사용됩니다. 즉, friend 키워드를 사용하면 해당 클래스의 private 멤버에 접근할 수 있는 권한을 부여할 수 있습니다. 2. Friend 키워드의 사용법 friend 키워드는 함수 및 클래스 두 가지 방법으로 사용할 수 있습니다. 1. Friend functions : Friend functions은 클래스의 개인 및 보호 멤버에 대한 액세스 권한이 부여된 비회원 기능입니다. 함수를 클래스의 친구로 선언하려면 클래스 정의에서 함수 선언 전에 friend 키워드를 사용해야 합니다. class MyClass { private: int x; public: frie..

공부/C++ 2023.03.04

모던(Modern) C++ 이란 무엇인가?

1. 모던(Modern) C++ 이란? C++은 1985년 처음 출시된 범용 프로그래밍 언어입니다. 그 이후로 여러 가지 표준이 도입되면서 언어는 크게 발전해왔습니다. Modern C++는 C++11 표준 이후 C++ 프로그래밍 언어에 추가된 기능 및 기능을 나타냅니다. 이러한 새로운 기능에는 언어의 구문 및 기능에 대한 개선 사항과 성능 및 안전성에 대한 개선 사항이 포함됩니다. 가장 최근 버전인 C++20은 2020년에 출시되었습니다. 이 블로그 글에서는 Modern C++이 무엇인지, 그리고 이전 버전과 의 차이점이 무엇인지 알아보겠습니다. 2. 간결성과 가독성 Modern C++의 주요 목표 중 하나는 언어를 더 간단하고 가독성이 높게 만드는 것입니다. 이는 타입 추론(type inference)..

공부/C++ 2023.02.25

벡터(Vector) 재할당 속도 줄이는 법

벡터 재할당 속도를 낮추려면 1. 벡터를 초기화할 때 벡터에 더 많은 메모리를 미리 할당합니다. 2. 벡터에 새 요소를 추가하기 전에 벡터의 크기를 수동으로 늘릴 수 있습니다. 다음은 예시입니다. 1. 더 큰 크기로 벡터 초기화 std::vector v(1000); // Initialize vector with 1000 elements 2. reserve()를 사용하여 메모리를 사전 할당합니다. std::vector v; v.reserve(1000); // Preallocate memory for 1000 elements 3. resize()를 사용하여 벡터의 크기를 수동으로 증가시켜줍니다. std::vector v; v.resize(1000); // Increase the size of the vect..

공부/C++ 2023.02.07

벡터에서 push_back을 이용할 때 메모리가 왜 2배씩 늘어나는가?

push_back 메서드를 사용할 때 벡터의 메모리 사용량이 두 배가 되는 이유는 벡터가 사용하는 동적 메모리 할당 전략 때문입니다. 벡터는 동적 메모리 할당을 사용합니다. 즉, 런타임 중에 필요에 따라 메모리를 할당합니다. push_back 메서드는 벡터의 끝에 새 요소를 추가하고, 벡터의 현재 메모리 용량이 새 요소를 저장할 만큼 크지 않을 경우 벡터는 더 많은 메모리를 할당해야 합니다. 벡터 요소가 인접한 메모리 블록에 저장되도록 하기 위해 벡터는 일반적으로 각각의 새 요소에 충분한 메모리를 할당하는 대신 더 큰 청크로 메모리를 할당합니다. 이는 성능 면에서 비용이 많이 들 수 있는 메모리 할당 및 할당 해제 횟수를 줄이기 위해 수행됩니다. 벡터의 메모리가 부족하면 일반적으로 메모리 용량을 두 배로..

공부/C++ 2023.02.07

추상 클래스(abstract class)와 인터페이스(interface)의 차이

추상 클래스(abstract class)와 인터페이스(interface)는 C++의 두 가지 OOP 개념입니다. 차이점은 다음과 같습니다. 정의 : 추상 클래스(abstract class)는 인스턴스화를 할 수 없고 서브 클래싱되도록 의도된 클래스입니다. 인터페이스(interface)는 하위 클래스가 따를 계약을 지정하는 순수 가상 클래스입니다. 상속 : 추상 클래스(abstract class)는 다른 클래스 및 인터페이스에서 상속할 수 있지만, 인터페이스(interface)는 다른 인터페이스에서만 상속할 수 있습니다. 구현 : 추상 클래스(abstract class)는 추상 메서드와 구체적인 메서드를 모두 포함할 수 있지만, 인터페이스(interface)는 추상 메서드만 포함할 수 있습니다. 구체적인 ..

공부/C++ 2023.01.31

인터페이스(interface)의 개념

1. 인터페이스란? 인터페이스는 특정 기능을 구현할 것을 약속한 추상 형식을 말합니다. Java나 C# 등의 다른 객체 지향 언어에서는 인터페이스 형식을 제공하지만, C++언어에서는 인터페이스 형식을 제공하지는 않지만 순수 가상 메서드를 이용하여 정의할 수 있습니다. 인터페이스는 멤버 필드나 구체적으로 구현한 메서드를 갖지 않고 특정 기능을 약속한 메서드만 갖습니다. 그리고 모든 멤버는 사용하는 개발자와의 약속으로 모든 멤버를 public으로 접근 지정합니다. C++ 언어에서는 구조체(struct)의 기본 값이 public 이여서 구조체를 이용하여 인터페이스를 정의하는 이들도 많습니다. 물론 클래스(class)를 통해서 인터페이스를 만들 수 있습니다. 아래 예제는 구조체와 클래스를 이용하여 인터페이스의 ..

공부/C++ 2023.01.25

추상 클래스(abstract class)의 개념

C++에서는 하나 이상의 순수 가상 함수(Virtual Function)를 포함하는 클래스를 추상 클래스(abstract class)라고 합니다.이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가진 함수의 집합을 정의할 수 있게 해줍니다. 즉, 반드시 사용되어야 하는 멤버 함수를 추상 클래스에 순수 가상 함수로 선언해 놓으면, 이 클래스로부터 파생된 모든 클래스에서는 이 가상 함수를 반드시 재정의해야 합니다. 추상 클래스는 동작이 정의되지 않은 순수 가상 함수를 포함하고 있으므로, 인스턴스를 생성할 수 없습니다. 따라서 추상 클래스는 먼저 상속을 통해 파생 클래스를 만들고, 만든 파생 클래스에서 순수 가상 함수를 모두 오버라이딩하고 나서야 비로소 파생 클래스의 인스턴스를 생성할 수 ..

공부/C++ 2023.01.24

malloc과 new의 차이점, free와 delete의 차이점

1. malloc과 new의 차이점 malloc()은 힙에 메모리를 할당하는 C/C++ 표준 라이브러리의 함수입니다. new는 힙에 메모리를 할당하는 C++의 연산자이지만 객체 초기화하기 위해 생성자를 호출하기도 합니다. 둘 사이의 주요 차이점은 malloc()은 메모리만 할당하는 반면 new는 객체도 초기화한다는 것입니다. 또한 malloc()은 올바른 유형으로 캐스팅되어야 하는 무효 포인터를 반환하고, new는 올바른 유형에 대한 포인터를 반환합니다. malloc에 의해 할당된 메모리로 작업을 마치면 free()를 호출하여 메모리 할당을 해제해야 하는 반면 new의 경우 delete를 호출합니다. 2. free와 delete의 차이점 free()는 이전에 malloc()에 의해 할당된 메모리를 할당 ..

공부/C++ 2023.01.18

new와 delete의 개념 및 차이점

1. new와 delete의 개념 C++에서 "new"는 런타임에 개체 또는 개체 배열에 대한 메모리를 동적으로 할당하는 데 사용됩니다. 반면에 "delete"는 "new"를 사용하여 이전에 할당된 메모리 할당을 해제하는 데 사용됩니다. "new"는 생성되는 객체의 생성자를 호출하고, "delete"는 삭제되는 객체의 소멸자를 호출합니다. 메모리 누수를 방지하려면 "delete"를 사용하여 "new"를 사용하여 할당된 메모리를 할당 해제하는 것이 중요합니다. 2. new와 delete의 사용 예제 다음은 new와 delete를 사용한 C++ 예제입니다. 새로 할당된 메모리 블록의 시작 부분에 대한 포인터를 반환합니다. int* pInt = new int; new를 사용하여 객체 배열을 할당할 수도 있습니..

공부/C++ 2023.01.17

포인터(pointer)란?

포인터란? 포인터는 다른 변수의 메모리 주소를 보유하는 변수입니다. 포인터는 메모리를 직접 조작하는 데 사용되며 많은 프로그래밍 언어, 특히 C 및 C++와 같은 수동 메모리 관리 기능이 있는 프로그래밍 언어의 기본 개념입니다. 포인터 변수는 다른 변수의 메모리 주소를 보유하며 이 주소는 포인터를 통해 액세스하고 조작할 수 있습니다. 포인터 변수가 역참조되면(포인터 변수 앞에 별표(*)를 붙임) 보유하고 있는 메모리 주소에 저장된 값을 반환합니다. int x = 5; int* p = &x; int y = *p; 예를 들어 값이 "5"인 변수 "x"와, "x"의 메모리 주소를 보유하는 포인터 변수 "p"가 있는 경우, 다음 코드를 사용하여 포인터를 역참조하고 값을 가져올 수 있습니다. 여기서 변수 "p"는..

공부/C++ 2023.01.15

우선순위 큐(period_queue)의 개념

우선순위 큐(period_queue)는 일반 큐와 유사하게 일련의 요소를 저장하는 데 사용되는 데이터 구조입니다. 그러나 우선순위 큐(period_queue)의 대기열에는 각 요소가 기간 또는 시간 간격과 연결되는 추가 제약 조건이 있습니다. 대기열의 각 요소는 값과 기간으로 구성됩니다. 기간은 요소가 제거되기 전에 대기열에 남아 있어야 하는 시간을 지정합니다. 요소가 기간 대기열에 추가되면 해당 기간을 사용하여 대기열에서 제거해야 하는 시기를 결정합니다. 기간이 만료되면 요소가 대기열에서 제거되고 더 이상 액세스할 수 없습니다. 우선순위 큐(period_queue)는 일반 큐와 타이머의 조합을 사용하여 구현할 수 있습니다. 타이머는 대기열의 요소와 관련된 기간 만료를 추적하는 데 사용됩니다. 요소가 대..

공부/C++ 2023.01.13
반응형