< Programming >/C++

std::Funtion 정리

최근에 공부하면서 새로 알게 된 함수포인터 비슷한 기능을 정리해본다. 이것도 boost에서 넘어왔다는데, C++11 표준으로 추가됐다. 사용방법 은 아래와 같다. std::function SendPacketFunc; // 선언 // 람다형식으로 사용 auto sendPacketFunc = [&](UINT32 clientIndex_, UINT16 packetSize, BYTE* pSendPacket) { SendMsg(clientIndex_, packetSize, pSendPacket); }; 위의 코드에서 SendPacketFunc는 std::function 클래스 템플릿을 이용하여 선언된 변수로, 함수나 함수 객체를 저장할 수 있는 변수이다. 위와 같은 방식으로 SendPacketFunc 변수를 통해 ..

2023.04.06 게시됨

< Programming >/C++

C++ Window IOCP Server

이 글은 이직을 준비하는 과정에서 머릿속 개념 정리 및 포트폴리오를 위해 공부하는 과정에서 작성하였다. 학습에 참고한 유튜브 강의 '최흥배 - C++ 게임서버 개발' 이 많은 도움이 되었다. 참고 링크 #1 : https://github.com/jacking75/edu_cpp_IOCP GitHub - jacking75/edu_cpp_IOCP: IOCP 실습 IOCP 실습. Contribute to jacking75/edu_cpp_IOCP development by creating an account on GitHub. github.com 참고 링크 #2 : https://youtu.be/RMRsvll7hrM 깃허브에 단계별로 학습목표 나와있어서 너무 좋다.. 첫 며칠 동안 윈도우에서 제공하는 IOCP 속..

2023.04.06 게시됨

< Programming >/C#

메모리 구조에 관한 몇가지 정리(C,C++,C# 공통)

메모리 구조에 관해 알아보자. 크게 봤을 때 메모리의 구조는 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 나눌 수 있다. 이 중 사용자가 관리해야만 하는 영역으로는 힙 영역이 되겠으며, 스택과 데이터 영역은 컴파일 시점에 그 크기가 할당된다. 음.. 꼬리물리 방식으로 몇가지 개념에 대해 정리해보자. 스택 오버플로우가 뭔가? (컴파일시 스택영역의 디폴트크기는 1 Mega 이고, 스택메모리를 확장 할 수 있는데, Visual studio 환경설정에서 가능하다.)할당된 스택내에 스택프레임이 쌓이게 되는데, 재귀의 무한 반복 등의 이유로 스택영역의 크기를 초과하게 되는 상황을 말하며, 이 때 다른 메모리 영역을 침범하여 데이터의 손실 혹은 예상치 못한 변경을 야기한다. 스택 프레임이 뭔가? 함수가 호출되..

2020.02.06 게시됨

< Programming >/C#

유니티 포스트 프로세싱(Post processing)

포스트 프로세싱 후처리라고 번역되며, 게임화면이 최종 출력되기 전에 카메라의 이미지 버퍼에 삽입하는 추가 처리이다. 포스트 프로세싱을 사용하면 적은 노력으로 뛰어난 영상미를 구현할 수 있다.대부분의 포스트 프로세싱 연산은 엔더링 파이프라인의 주요 과정에서 적용되지 않고 마지막 부분에 적용된다.유니티는 포스트 프로세싱을 쉽게 사용할 수 있는 포스트 프로세싱 스택 패키지를 제공하는데, 이는 v1과 v2 버전이 있다. Camera 컴포넌트의 속성을 살펴보면 Rendering Path 옵션이 있는데 일반적으로 Forward Rendering 옵션으로 설정한다.이는 성능이 가볍지만 라이팅 표현이 실제보다 간략화되고 왜곡된다.Deferred Shading 으로 바꾸게 되면 빛을 온전하게 표현한다. 포워드 렌더링포워..

2020.02.04 게시됨

< Programming >/C#

익명함수와 람다식

익명 함수와 람다식 익명 함수는 미리 정의하지 않고, 인라인(실행 중인 코드 블록 내부)에서 즉석 생성할 수 있는 메소드이다.익명 함수는 실시간으로 생성할 수 있으며, 변수에 저장할 수 있는 값이나 오브젝트로 취급되며, 생성된 익명 함수는 델리게이트 타입의 변수에 저장할 수 있다. 단, 익명 함수는 미리 정의하지 않고 대부분 일회용으로 실시간 생성해서 사용하기 때문에 스코프 외부에서 따로 지칭할 수 있는 이름을 가지고 있지 않다. 익명 함수를 사용하면 실시간으로 일회용 메소드를 생성하고 이벤트로 등록할 수 있다. 간단한 예제를 보자. 1234567891011using UnitytEngine class EnemySpawner : MonoBehaviour { private void CreateEnemy(fl..

2020.02.04 게시됨

< Programming >/C#

System.Action ? ( 델리게이트 )

델리게이트와 event 키워드 Action 타입은 입력과 출력이 없는 메소드를 가리킬 수 있는 델리게이트이다. 델리게이트란 메소드를 값으로 할당 받을 수 있는 타입이다. 12345678910111213141516171819202122232425262728using UnityEngine; public class Cleaner : MonoBehaviour { Action onClean; void Start() { //+=를 사용해 메소드를 등록한다. 이때, () 괄호는 붙이지 않는 것에 주의한다. onClean += CleaningRoomA; // () 붙이지 않는다. onClean += CleaningRoomB; } void Update() { if(Input.GetMouseButtonDown(0)) { ..

2020.02.03 게시됨

< Programming >/C++

override & virtual 사용하기

Override 사용방법 1234567891011121314151617181920using UnityEngine; public class Monster : MonoBehaviour { //virtual 키워드를 통한 가상메소드 설정 : 자식 클래스가 오버라이드 할 수 있도록 설정 public virtual void Attack() { debug.Log("Attack!"); }} public class Orc : Monster { public override void Attack() { //모체클래스의 Attack을 실행 base.Attack(); //자식클래스의 재정의 debug.Log("Orcs Attack!"); }} Colored by Color Scriptercs 자식이 부모의 메소드를 오버라이드..

2020.02.03 게시됨