목록Categories (1096)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 1 : C++ 를 언어들의 연합체로 바라보는 안목은 필수 핵심 : 1. C++ 를 사용한 효과적인 프로그래밍 규칙은, C++ 의 어떤 부분을 사용하느냐에 따라 달라진다! C++ 을 이루고 있는 하위 요소 (Building Block) 은 크게 4 가지이다. C (C 에는 템플릿도 없고, 예외도 없고, 오버로딩도 없다) 객체 지향 개념의 C++ (클래스를 쓰는 C 에 관한 모든 것들. 캡슐화, 상속, 다형성, 가상함수 등) 템플릿 C++ (템플릿 메타 프로그래밍까지) STL (container, iterator, algorithm, fu..
이득우님의 '이득우의 게임수학' 책을 보며 좋은 내용을 정리하고 있습니다. 더 자세한 내용이 궁금하시다면, 책을 구매해 직접 읽어보시기를 추천드립니다! 삼각함수를 활용한 물체의 회전 삼각함수를 통해 물체를 회전하면 좌표값이 어떻게 변할까? 먼저, 다음과 같이 좌표 (1, 1) 을 θ 만큼 반시계 방향으로 회전하면, 다음과 같이 그려지게 된다. 위에서, 벡터 v 는 기저 벡터 e1 와 e2 의 합으로 표현되며, 이를 각 θ 만큼 회전 시킨 녀석을 (cosθ - sinθ, sinθ + cosθ) 로 표현할 수 있음을 알 수 있다. 동일한 원리로, 임의의 벡터 (x, y) 를 각 θ 만큼 회전시켜 (x', y') 를 구해보자. 식은 다음과 같이 쓸 수 있다. 기저벡터를 활용하면, 임의의 벡터 u 를 각 θ 만..
먼저 Message Pump 란, 한 메시지를 처리하는 도중 메시지 큐로부터 다른 메시지를 꺼내 이를 처리하는 코드를 의미한다. 윈도우 어플리케이션의 경우, UI 및 사용자 입력 처리하는 과정에서 메시지 펌프를 적극 활용하고 있다. 기초적인 Message Loop 코드는 다음과 같다. MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } 그런데 GetMessage 의 경우 데드타임(메시지큐에 메시지가 없어 GetMessage 가 놀고 있는 시간)을 제대로 활용할 수 없어, PeekMessage 를 많이 활용한다. PeekMessage 는 메시지 큐에 메시지가 있든 없든 리턴을 하기 때문..
Actor 와 ActorComponent 유니티에서는 게임 오브젝트 아래에 게임 오브젝트를 넣는 식으로 Hierarchy 를 만들어낼 수 있다. 하지만 언리얼은 그런 식으로 동작하지 않는다. 유니티에서는 항공기가 있다고 했을 때, 프리팹에 각종 게임 오브젝트를 하위에 넣어 조합하는 방식으로 해당 오브젝트를 제작할 수 있다. 그런데 언리얼에서 Actor 는 Bucket 같은 개념으로, 다양한 액터 컴포넌트를 담고 있다. 즉, 언리얼은 Bucket 안에 다른 Bucket 을 넣는 방식으로 오브젝트를 생성하지 않는다. 액터 컴포넌트는 재사용가능한 기능을 정의하는 컴포넌트에 대한 베이스 클래스로 충돌, 메시, 월드 이동, 소리 재생, 빛과 명암 등의 다양한 기능을 지원한다. 언리얼에서는 트랜스폼을 가진 액터 컴..
언리얼 코딩 표준 명명규칙 : 파스칼케이스, 접두사(U - UObject 상속 /A - AActor 상속 /S - SWidget 상속 / C - 에픽의 개념이 유사 / b - 부울 변수 / F - 그 외 대부분) 포터블 C++ 코드 : bool(크기 추정 금지, BOOL 은 컴파일 안됨), TCHAR, uint8, int8, uint(16, 32, 64 버전) , float, double, PTRINT(포인터를 가질 수 있는 정수, 크기 추정 금지) 표준 라이브러리 사용 : 표준 컨테이너와 스트링은 interop 코드를 제외하고 사용하지 말아야 함 코멘트 : 코드는 구현을 설명하고, 코멘트는 그 의도를 설명한다. 최신 C++ 언어 문법 : static_assert 사용, override 및 final 사..
언리얼 가비지 컬렉터(GC) 심화 정리 언리얼 엔진은 Reference Graph 를 만들어 오브젝트들의 사용 여부를 구분한다. 이 그래프 루트에는 "Root Set" 이라고 지정된 오브젝트 셋이 있으며, "Root Set" 에 포함된 객체들은 GC 대상에서 제외된다(Mark & Sweep 방식으로 추적). 세 가지 규칙 : UPROPERTY 선언 : 클래스 내부 멤버 변수가 클래스의 객체의 수명과 운명을 함께할 경우 선언 멤버가 가리키는 포인터 : 엔진이 인식하거나 관리하지 않는 메모리 영역을 가리키도록 만들면 안됨 TArray 를 활용 : UObject 또는 자식들에 대한 포인터를 안전하게 담을 수 있는 유일한 컨테이너 기타 인터페이스 예시 : // Object 를 살아있게 만드는 3가지 방법; //..
UML (Unified Modeling Language) UML 에는 Class, Sequence, Use Case, Component 등 다양한 종류가 있지만, 여기서는 주로 Class 와 Sequence 다이어그램을 정리한다. 클래스 다이어그램 (Class Diagram) 클래스들 사이의 관계는 다음과 같이 표현될 수 있다(참고 링크). 각 관계를 조금 더 자세히 기술하면 다음과 같다. 관계 표시 설명 연관 관계 (association) 실선이나 화살표 연관 관계는 오랜 시간 동안 같이할 객체와의 관계를 나타낸다(e.g. 자동차와 소유자의 관계) 보통 클래스의 속성(멤버 변수)에서 참조할 때 연관 관계를 가진다. 단방향 연관 관계의 경우, 화살표를 사용하여 클래스를 참조한다. 양방향 연관 관계의 경우..
MVC 패턴 개요 MVC 패턴은 앱을 Model, View, Controller 로 나누어 데이터와 로직을 분리하는 디자인 패턴이다. Model은 데이터를 가진 객체를, View는 사용자가 볼 결과물을 생성하는 컨테이너를, Controller는 사용자가 Model 과 View 를 호출하는 로직이다. 이때, Model 과 View 는 Controller 의 존재를 몰라야 결합도를 줄일 수 있다. Model 에 변경 사항이 생기면 View 는 Controller 를 통해 이벤트가 실행되어 화면이 업데이트 된다. MVC 패턴은 비즈니스 로직과 UI 로직을 분리하여 유지 보수를 독립적으로 수행할 수 있고, 확장성과 유연성이 뛰어나다는 장점이 있다. 하지만 하나의 컨트롤러에 다수의 View 와 Model 이 복잡..
또각또각. 딱딱한 구두 소리가 적막한 회의실을 울린다. 나는 늘 여자들이 왜 구두를 좋아하는지 궁금했었다. 기껏해야 든 생각은 '불편하지 않을까?' 정도의 아저씨다운 발상 뿐이었다. 그래서 누나의 구두를 몰래 신고 방 한바퀴를 돌았다. 아니, 사실 한바퀴가 아니라 세 발자국 정도를 걸었다. 너무 불편했다. '도대체 여자들은 이걸 어떻게 신고 다니는거지?' 그런 생각과 함께, 내 마음 깊은 곳에서 무한한 존경심이 자라나는 것을 느꼈다. 패션에 무지한 나조차도, 얼죽코라는 말은 귀에 딱지가 앉히도록 들어왔다. '얼어 죽어도 코트'. 그만큼 코트가 멋있으시단 거지. 그런데 왜 사람들은 코트가 멋있다고 하는걸까. 따뜻하지도 않은 부직포를 왜 그리도 좋아할까? 구두도 어떻게 보면 비슷한 존재..
내 생각은 나만의 생각일까. 나는 그저 다른 사람들의 생각을 깔대기에 한번 걸러 기록하는 하수인이 아닐까. 지금의 내 생각은 누구의 생각인가. 유입이 있어야 유출이 있다. 그렇기에 많은 작가들은 새로운 자극을 찾아 떠난다. 아무도 없는 골방에서 나오는 작품은 외로움 섞인 인간 내면에 대한 고찰만이 담겨 있을거야, 아마. 그러니 글이 써지지 않을 때에는 사람을 만나야 하는 것이다. 베껴와야 하니까. 훔쳐야만 하니까. 오늘도 타인의 생각을 나의 위대한 사고인것처럼 포장하는 일에서 소소한 쾌락을 느낀다. 나의 도벽. 나의 표절. 자수를 하기 위해 손가락을 부지런히 놀린다. 슬프게도 내 글은 나의 범죄기록에 불과한 것일까. 그렇다면 누구를 위해 나의 치부를 드러내야 하는 걸까. 나를 위해서겠지. 분명 나..