전체 글 118

정렬 알고리즘 (버블, 삽입, 선택)

오늘은 정렬 알고리즘에 대해 알아보도록 하겠습니다.1. 개요많은 컴퓨터 과학자들은 어떻게하면 좀더 쉽고 빠르게 배열을 정렬할수있는지에 대해 많은 연구를 하였습니다. 그 중에서 빠르진 않지만 쉬운 정렬인 (버블, 삽입, 선택) 정렬 에대해 알아보도록 하겠습니다.2. 버블 정렬(Bubble Sort)버블정렬은 선택정렬과 유사합니다. 서로 인접한 두 원소를 비교하고, 조건에 맞지않으면 자리를 교환하는 알고리즘입니다. 매우 쉬운 알고리즘 입니다. 버블 정렬의 과정은 다음과 같습니다.1화전에 첫 번쨰 원소와 두 번째 원소 비교 다시 두 번째 원소와 세 번쨰 원소의 비교 점점 나아가 마지막 원소 -1 과 비교하여 조건이 맞지 않으면 서로 자리를 변경한다.1회전을 수행하고 나면 가장 큰 수가 맨 뒤 원소로 향하고 2..

virtual 생성자와 생성자 안에 virtual 함수 부르는 설명

안녕하세요 오늘은 virtual 생성자와 생성자 안에 virtual 함수를 부르면 어떤 현상이 일어나는지에 대해 알아보도록 하겠습니다. 1. 개요 보통 virtual이 선언된 함수나 상속은 RTTI를 사용하여 현재의 객체의 타입 정보를 알수있는 효과를 가지고있습니다. RTTI나 virtual에 대해서는 아래 링크에서 자세히 포스팅 해놓았으니 읽어 보시길 바랍니다. https://chogyujin-study.tistory.com/25 C++ RTTI 에 대해 오늘은 RTTI에 대해 공부하겠습니다. RTTI란? Run Time Type Information의 약자로 프로그램 실행 중에 개체의 형식이 결정될 수 있도록 하는 매커니즘입니다. 다시 말해 실행중 포인터가 가르키는 객체의 chogyujin-study..

IK 와 FK의 차이점

오늘은 IK 와 FK의 차이점에 대해 공부하도록 하겠습니다. 1. 개요 보통 게임을 만들면 한 캐릭터의 스켈레탈 본을 놓고 상속계층을 가지고 있습니다. 하지만 보통 이 스켈레탈본도 부모에 따라 자식이 변경되나 자식에 따라 부모가 변경되냐에따라 애니메이션, 계단오르기 등 여러가지가 변경이 될수가 있습니다. 그러므로 오늘은 IK와 FK에 대해 하나식 공부해보도록 하겠습니다. 2. FK FK는 Forward Kinematics 라고 하며 보통 개체 계층 구조에서 상위개체 즉 부모 개체가 변하면 자식 계체가 변형이 됩니다. 이 변형은 Pivot 점을 중심으로 하는 회전 각도, 피벗 축과 축 크기 조정 배율에 따른 변화가 정의됩니다. 각각의 개체는 상위 개체의 변형을 그 자체에 적용이 됩니다. 따라서 계층 구조인..

RVO vs NRVO

오늘은 RVO 랑 NRVO 에 대해서 알아보도록 하겠습니다. 1. 개요 RVO 랑 NRVO는 함수에서 C++ 객체지향을 어떻게 하면 빠른 속도와 컴파일러단에서 부터 코드를 최적화 시켜서 더욱 빠르고 정확하게 실행 할 수 있는지에 대한 내용입니다. 대표정으로 RVO 와 NRVO 가 있습니다. RVO = Return Value Optimization NRVO = Named Return Value Optimization 2. RVO VS NRVO #include #include #include using namespace std; class A { private: string s; public: A(string s) : s(s) { cout

Constexpr VS Const

오늘은 Constexpr과 Const 의 차이점을 공부하도록 하겠습니다. 1. 개요 const 에 대해서는 프로그래밍 언어를 공부해본 사람들은 다 알고있는 사실인 상수 변수를 선언할때 쓰는 선언문입니다. 하지만 C++을 공부하면서 constexpr에 대해 알게되었고 매우 흥미로운 선언문이라는것도 알게되었습니다. 그래서 오늘은 const 와 constexpr 에 대해 알아보도록 하겠습니다. 2. Const (상수) const 는 일반적으로 모든 프로그래밍 언어??에서 상수역활을 합니다. 한번 초기화된 상수 변수는 다신 변수의 저장된 값을 변경할수가 없습니다. 또한, const는 선언과 동시의 초기화 작업을 이루어져야하는 값 입니다. ex) const int a = 5; // 성공적인 초기화 const in..

const int* p 와 int * const p의 차이점

1. 개요 오늘은 const int* p 와 int* const p의 차이점을 공부하도록 하겠습니다. 2. 설명 const 는 상수 이므로 대상 변수를 선언한뒤 초기화를 해주면 값을 변경을 안해주는 것을 의미합니다. ex) const int a=5; a = 6; // 에러 대상은 상수이므로 변경을 할수 없음 이런 경우에는 대상이 상수이므로 값을 변경할수 없습니다. 그러면 const int * p = new int(5); 라는 식은 처음의 초기화를 진행했지만 나중에 값을 변경을 못하는것일가여 아니면 주소값을 변경을 못하는것 일가여?? 3. const int * p == int const * p 결론 부터 말씀드리면 const int* p 는 *p의 값 즉 Heap에 저장되있는 값을 변경을 못하는 것 입니다..

FSM, HFSM, BT 의 구조

오늘은 FSM(유한 상태 머신), HFSM(계층형 유한 상태 머신), BT(비헤이비어 트리) 에 대해서 공부하도록 하겠습니다. 1. FSM, HFSM, BT? FSM HFSM BT라는 말을 들으면 무슨 약자인가?? 라는 생각이 먼저 떠올릴것입니다. 이 각각 유한상태 기계, 계층 유한상태 기계, 비헤비어 트리라는 약자이며 각각 AI행동 패턴을 설계하는등 다양한 곳에서 사용됩니다. 프로그래머 뿐만아니라 기획자분들도 알면 좋다고 하며 알고리즘적이 아닌 구조를 이해하기위해 포스팅합니다. 2. FSM 유한상태 기게 단순한 AI를 설계할때 사용을 많이합니다. 해당 구조가 사용된 AI는 한 번의 한가지 상태를 이전합니다. 심플하게 두 가지 AI가 있다고 생각해봅시다. FSM은 한 번의 한가지의 상태만 가지고 있을수 ..

언리얼 엔진의 가비지 컬렉션

오늘은 언리얼 엔진의 가비지 컬렉션에 대해 공부하겠습니다. 1. 가비지 컬렉션? 가비지 컬렉션이란 메모리를 관리해주는 시스템으로 C#, JAVA 등 언어에는 기본적으로 가지고 있는 시스템입니다. 힙 메모리에 영역을 할당받으면 자동으로 가비지 컬렉션 시스템에 감시를 받으며 만약 더 이상 사용되지 않는 영역을 자동으로 해제작업을 해주는 시스템입니다. 하지만 이런 시스템은 C++에는 없으므로 수동으로 해제해주거나 스마트 포인터에 힘을 빌려서 사용해야합니다. 그렇치만 언리얼에서는 이 가비지 컬렉션을 지원을 해줍니다. 2. 언리얼의 가비지 컬렉션 언리얼에서 UPROPERTY 리플렉션을 붙인 객체는 언리얼 엔진이 자동으로 가비지 컬렉터를 이용하여 메모리를 관리합니다. 가비지 컬렉션을 수행함에 있어 리플렉션 시스템을..

언리얼 엔진의 리플렉션 (프로퍼티)

오늘은 언리얼 엔진의 리플렉션에 대해 알아보도록 하겠습니다. 1. 리플렉션? 리플렉션이라는 것은 자바나 C#등에서 지원하지만, 언리얼 엔진에서 사용되는 C++은 지원을 하지 않습니다. 그럼 어떻게 언리얼 엔진에서 지원을 해주는 것일가요? 자바는 리플렉션을 사용할때 객체를 통해 클래스의 정보를 분석해 내는 프로그램을 말합니다. 간단하게 컴파일 시간이 아니라 런타임시간에 동적으로 특정 클래스의 정보 객체화를 통해 분석 및 추출할수있는 프로그래밍 기법이라고 합니다. 그럼 언리얼 엔진의 리플렉션은 무엇인가? 공식 문서를 살펴보면 리플렉션은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다. 이는 엉청나게 유용한 데다 언리얼 엔진 테크놀로지의 근간을 이루는 것으로, 에디터의 디테일 패널, 시리얼라이제이션, 가..

언리얼 엔진의 CDO 로딩 과정 등

이번포스팅에는 언리얼의 초기화 과정 즉 CDO 로딩 과정을 공부하도록 하겠습니다. 1. 개요 언리얼 엔진에서의 C++ 상에 생성자는 constructHelpers라는 키워드를 사용하여 애셋이나 컴포넌트 등을 불러올수가 있고 붙힐수도 있습니다. 여기서 의문점이 들수밖에없습니다. 왜 언리얼 엔진은 각각의 생성자에 저런 특수한 키워드를 사용할수있으며 왜 begin play나 다른 함수에는 사용이 불가한가에 대해서 이를 통해 공부를 하였고 포스팅을 해볼려고 합니다. 2. UClass, 리플렉션, 프레임워크 UClass에는 언리얼 오브젝트에 대한 클래스 계층 구조 정보와 맴버 변수, 함수에 대한 정보를 모두 기록 언리얼 엔진은 하나의 오브젝트가 만들어지기 위해서는, 실제 컴파일 전에 언리얼 헤더 툴에 의해 헤더 ..