근래에 동료로부터 들은 내용이라 사실 확인을 하다가 확인한 사항입니다.

처음에는 별 생각 없었는데 좀 더 생각해보니 제가 C++를 공부했을 때
Lambda의 사용 방식이나 Capture의 기능 동작은 설명이 되어 있는데 
내부적으로 어떻게 동작하는지, 혹인 이런 주의 사항은 보지 못했던 것 같더군요.

 

요는 Lambda의 Capture를 사용하면 어떻게 값을 받아오느냐 입니다.

이를 제대로 이해하기 위해서는 Lambda가 Functor와 비교해 어떻게 구성되었느냐를 알아야 합니다.

 

결론부터 얘기하면 Capture가 없는 Lambda나

Call-by-Value로 Capture를 쓰는 Lambda는 일반 Functor와 거의 동일하게 구성됩니다.

 

하지만 Call-by-Reference로 Capture를 쓰면 구조 차이가 발생합니다.

첫번째로, Reference 된 Parameter가 Pointer로 참조가 됩니다.

여기서 이 글의 가장 중요한 전달사항이 나옵니다.

Lambda의 Capture는 Call-by-Reference더라도 Pointer이기 때문에 Pointer Dangling이 발생할 수 있습니다.

이는 Lambda가 비동기적으로 생성되는 경우,

즉 네트워크나 쓰레드와 사용하는 경우에 Invalid Argument를 발생할 수 있습니다.

 

두번째로, Functor는 Constructor가 외부에 별도로 존재를 하는 반면, 

Lambda의 Constructor는 그 내부에 존재를 하고있습니다.
즉, Constructor에서 발생하는 복사 작업이 요구되지 않아 일반 Functor보다 조금 더 가볍습니다. 아주 조금요.

 

이에 대해 자세한 설명은 원문을 본 블로그를 첨부하겠습니다.

어셈블리까지 분석을 해서 비교를 해주고 있기에 직접 포스트를 읽으시면 더 명확히 이해가 갈겁니다.

 

원본 포스트 출처 - https://web.mst.edu/~nmjxv3/articles/lambdas.html

 

C++ Lambdas Under The Hood

C++ Lambdas Under The Hood Introduction C++11 introduced lambdas, which provide a syntactically lightweight way to define functions on-the-fly. They can also capture (or close over) variables from the surrounding scope, either by value or by reference. In

web.mst.edu

간단하게 Twitch 로그인을 구현하기 위해 이것저것 찾아보았습니다.

처음에는 API를 다운받는 줄 알았는데 알고 보니까 Http Request를 보내면 되는 것 같더군요.

정확히는 Rest겠지만 문제 없을 것 같습니다.

이에 대해 SDK나 API를 검색해보다가 Unreal에서 지원을 하는 것을 확인했습니다.

 

우선 만들어볼 기능은 다음과 같습니다.

  • 버튼 클릭 시 Twitch 로그인 창 출력
  • 로그인 시 받아온 정보를 로그로 출력

이게 되면 그 뒤에는 스펙을 좀 더 명확히 하려 합니다.

 

욕심으로는 PC와 모바일로 분리를 하고 싶습니다.

하지만 생각해보니 모바일에서 되던 것을 굳이 PC에서 막아야 할 이유가 없었습니다.

확장이 되면 확장이 되었지 굳이 분리하지는 않는거죠.

그런데 이게 허가가 되면 모바일에서도 PC 컨텐츠를 제공해도 차이가 없는 것 같습니다.

 

결국 거창한 구조를 갈구했지만 현실보다 더 뒤떨어진 구상이었던 것 같습니다.

물론 더 큰 규모의 PC 게임에서는 의미가 있는 시도이긴 합니다.

공부라는 의미에서는 효율을 떠나서 해보는게 중요하기도 하죠.

 

문제는 어떻게 할지 결정을 못했다는 것입니다.

이래저래 고민이 됩니다만 우선은 Twitch에서의 로그인 창을 출력한 뒤 고민해보려 합니다.

약간 방향성도 미정인 것 같고...

플랫폼도 미정인 것 같고...

 

일단 확실히 해야 할건 꾸준히 할 것. 그리고 무리하지 않을 것. 이 두가지입니다.

회사를 다니면서 아직 적응 중인데 뭔가 다른 것을 하고 싶어서 개인 프로젝트를 진행하려 합니다.

 

목적

  • 언리얼 엔진의 프로젝트 구조를 이해하고 이를 직접 제작 할 수 있는 경험과 지식 터득
  • 데디케이트 서버 프로그래밍 경험
  • 외부 API를 직접 적용해보는 경험
  • 랜드스케이프 맵을 제작해보는 경험
  • 액션 어드벤쳐 게임 시스템을 제작해보는 경험
  • SNG 시스템을 제작해보는 경험

 

목표

  • 데디케이트 서버로 개발
  • 트위치 API로 로그인
  • 게임 서비스를 크게 두가지로 나뉘어서 제공. (액션 어드벤처 / SNG 및 전함 게임)

 

적고 보니까 규모가 크네요.

최종 목표는 게임 컨텐츠 개발을 밀도있게 하는 것이지만, 

결국 이것들이 되려면 로비나 접속 시스템을 우선적으로 해야 될 것 같습니다.

 

순서에 맞춰서 다시 적어보자면

Sorted 목표

트위치 API로 로그인 (~3월)

  • 최초 접속 시 메인 씬에 로그인 버튼 있음
    • 버튼 클릭 시 Twitch 계정 로그인 UI 출력되고 로그인 가능
  • 최초 접속이 아닐 시에는 바로 메인 씬으로 넘어감.
  • 접속한 플랫폼의 종류에 메인 씬에서 출력되는 버튼이 달라짐.

데디케이트 서버 개발 (~9월)

  • 메인 씬에서 UI 및 제공 기능 구상
  • 씬에서 버튼 클릭 시 씬 이동
  • 데디케이트 서버를 만들고 서버에서 세션 미리 생성함.
  • 매칭 방식을 구상하고 이를 구현 함.
  • 매칭이 되면 게임 씬을 넘어가면서 

게임 서비스 개발 (~ 21년 12월)

  • 추후 기능 지정.

대략 이렇게 될 것 같습니다.

굉장히 널럴하게 일정을 잡았지만 주말에만 잠깐씩 하는걸 생각하면 어떻게 될지 모르겠습니다.

가능하면 데디케이트 서버 개발까지 빠르고 간단하게 끝내고, 게임 개발에 시간과 노력을 최대한 투자해보겠습니다.

'폐기된 게시판 > 개인 프로젝트' 카테고리의 다른 글

21.02.28 개발일지  (0) 2021.02.28

+ Recent posts