개발자 면접 공부 111

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에는 언리얼 오브젝트에 대한 클래스 계층 구조 정보와 맴버 변수, 함수에 대한 정보를 모두 기록 언리얼 엔진은 하나의 오브젝트가 만들어지기 위해서는, 실제 컴파일 전에 언리얼 헤더 툴에 의해 헤더 ..

블로킹 소켓 (Blocking Socket), 논 블로킹 소켓(Non-Blocking Socket)

오늘은 블로킹 소켓 과 논 블로킹 소켓에 대해 알아보겠습니다. 1. 블로킹과 논 블로킹 이것은 제가 예전에 개시했던 동기 비동기 블로킹 논블로킹 을 보시고 오시는걸 추천드립니다. https://chogyujin-study.tistory.com/51 블로킹(Blocking), 논 블로킹(Non-Blocking), 동기(Sync), 비동기(ASync) 오늘은 블로킹, 논 블로킹 추가로 동기, 비동기에 대해 알아보겠습니다. 동기&비동기 vs 블로킹&논블록킹 개념 차이 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들 chogyujin-study.tistory.com 2. 블로킹 소켓 블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태..

소켓(socket) 통신

오늘은 소켓 통신에 대해 알아보겠습니다. 1. 소켓이란? 소켓(socket)은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데이터를 보내거나 받기위해서는 반드시 소켓을 열어 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어야함 소켓은 프로토콜, IP주소, 포트 넘버로 정의된다. 프로토콜 : 통신 규약, 약속 IP : 전 세계 컴퓨터에 부여된 고유의 식별 주소 포트 : 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를..