전체 글28 언리얼엔진 CDO 객체 활용 (feat. 버프시스템,조건) 내가 전 프로젝트에서 개발할 때 일이다. 다른 회사도 비슷하겠지만, 보통 기획서가 통과되고 회의를 거쳐 테크팀에게 날라올 일감이 점점 쌓여가면테크팀 프로그래머들이 그 일감들을 상사에게 분배받게 된다.일을 각각 다 분배받고 시간이 조금 지나 분배받은 일을 거의 끝냈을 시점. 기획팀 팀장이 테크팀 팀장에게 "혹시 버프시스템 언제까지 되나요?"라고 물었었다.그런데 그 버프시스템이란게 사전에 말도 없었고 회의도 없었던거라 기획팀장이랑 테크팀장이랑 논쟁이 오고갔다.기획팀장은 이 버프시스템이란게 없어선 안될 시스템이라는 의견이란것을 피력하고있었고테크팀장은 왜 일정도 없이 갑자기 이렇게 말하냐고 따지고있었다. 근데 버프시스템은 게임에서 진짜 중요해서 뭔가 이 일이 나에게 올 것이라는걸 크게 짐작하고있었다.인게임 관련.. 2025. 2. 13. [idiom] CRTP CRTP는 Curiously Recurring Template Pattern 의 준말로 템플릿클래스에서 사용하는 패턴이라고 한다.핵심만 말하자면 베이스 함수에서 자식의 함수를 사용하는 패턴인데왜 그렇게 하냐면 그렇게하면 가상함수를 대신 할 수 있다.가상함수는 함수 콜 시 오버헤드가 더 크기때문에 이걸 피하려고 만든 패턴인것 같아보였다. 코드는 다음과 같다templateclass Base{ void Execute() { static_cast(this)->Implementation(); }}class Derived : Base{ void Implementation() { // 오! 굿 }}int main(){ Derived d; d.Execute();.. 2025. 2. 12. [Idiom] 반환 값 최적화 (RVO), 이름있는 반환 값 최적화(NRVO) 사실 이 두개 처음 들었을 때, 엄청 대단하고 깔끔한 코드를 만들어 낼까 생각했었다.근데 알고보니까 컴파일러가 그냥 해주는거였다. RVO,NRVO 영어를 풀면, Return Value Optimazation, Named Return Value Optimization이라더라즉 반환값을 최적화 하겠다는건데, 이게 뭐냐면Data CreateData(){ return Data();}int main(){ Data d = CreateData();} 이런 클래스를 생성함과 동시에 반환하는 함수에 대해서 컴파일러가 알아서 최적화를 해준다는 것이다.그럼 어떤 최적화를 말하는것이냐면,우리는 방금 함수를 호출했고, Data인스턴스를 생성했다. 그럼 여기서 생성자가 호출되는것은 당연하고,메인문에 있는 Data변수는 이걸 받았.. 2025. 2. 12. [Idiom] 보편참조와 퍼펙트포워딩 회사에 들어가기 전에도 알고있던 개념이었지만 이 중요한걸 설명을 안해놓다니 ㅎㅎ..보편참조,퍼펙트포워딩,얕은복사,깊은복사 얘내들은 내가 생각하기에 하나의 세트로 묶어서 이해해야한다. 2022년에 얕은복사랑 깊은복사 설명 조금 해둔게 있긴하지만, 거기서 빠진 설명이 하나 있다.얕은복사건 깊은복사건, 프로그래머가 직접 구현해줘야한다.이동생성자에서 깊은복사해놓고 패러미터로 move썼다고 얕은복사가 되는게 아니다. 어떤 특정클래스에서 얕은복사와 깊은복사가 만약 구현이 된다면, 이제 이 클래스는 생성자의 패러미터가 좌측값인지 우측값인지 민감하게 반응을 하게 된다. 보편참조위 내용을 기억한 채로 보편참조를 알아보자. 보편참조는 템플릿에서 사용되는 개념인데, 패러미터에 앰퍼선드 두개를 붙히면 좌,우측값 상관없이 모두.. 2025. 2. 12. [Idiom] 언리얼엔진에서 배워온 TypeDispatch 이번에 설명할 것은 TypeDispatch 라는 Idiom인데이 Idiom을 알아낸 계기가,프로젝트에서 네트워크 최적화를 하다가 NetSerialize라는 함수를 UStruct에 구현하면서 알게되었다.언리얼엔진은 Ustruct의 시리얼라이징을 커스터마이징 할 수 있다. (변수단위 리플리케이션 조작 가능)그때 쓰는게 요따구 형태의 플래그를 주는 방식이다.templatestruct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2{ enum { WithNetSerializer = true }}이렇게 플래그를 템플릿으로 주는것을 TypeDispatch라고 하더라.이 코드를 타고 타고 타보면template struct TStruct.. 2025. 2. 12. [내가 생각한 패턴] 상태패턴, 기분이 내키는대로 간다 게임하다보면 기절,혼돈,마비 뭐 여러가지 많은 상태이상들이 많은 것 같다.게임을 그냥 플레이하는입장이 아니라 만드는 입장으로서 저 상태들의 충돌을 어떻게 제어했는지 궁금했다.어떤 사람은 이걸 스파게티코드로 if문의 반복(솔직히 가성비 지림 ㅋ)으로 해결한다.근데 나중에 힘드니까 다른방법이 있는지 알아보자.상태패턴이번에 설명할 주제는 상태 패턴이다.상태패턴은 주체의 상태에 따라서 다르게 분기되는 로직을 깔끔하게 처리하는 패턴이다. 예를들어서 이런코드가 있다고 생각해보자class Player{ void Attack ( if(bIsJumping == true) { // 점프공격 } else { // 공격 .. 2025. 2. 12. 이전 1 2 3 4 5 다음