본문 바로가기

프로그래밍

[Lua] C API 레퍼런스 읽기 https://www.lua.org/manual/5.3/manual.html 기본 원리는 지난글에서 설명했다. 그럼 이번엔 실제 API를 좀 읽어보도록 하자 레퍼런스 오른쪽엔 다음과같은표시가 있다. 각 필드는 팝, 푸쉬, 에러 여부다 lua_pop은 위와 같은 표시가 붙어있는데, n개를 스택에서 팝하는 함수라서 그렇다. 반대로 +0이라 푸쉬는 아예없다. lua_tonumber을 보자. 이번엔 푸쉬도 팝도 없다. 즉, 단순 tonumber같은거로 값을 가져온다고 값이 사라지진 않는것이다 지난글에선 그림에서 잘못표시했었다 걍 tonumber하면 여전히 스택에 함수 반환값등으로 생긴 값이 남아있으니까, 팝을 적절히 잘 해주도록하자. 말그대로 top을 가져온다. 정확히는 top의 인덱스를 가져오기 때문에, 사실.. 더보기
[Lua] Lua랑 C/C++ 사이 통신하는 방법 신조차 모독하는 사상 최대의 인터프리터 luajit 루아51이든 루아지트든 똑같다고는하는데 C++에 임베딩한 후에 뭘 해야할지 잘 모르겠었다 근데 어쩌다보니 땔질좀 하니 뭔가 되긴 하더라 그 내용을 정리해보도록 하겠다 진짜 기본 시작 세팅은 건너뛰었는데, 이부분은 나중에 글 쓸수도 있고 아닐수도 있습니다 기본 작동원리 꽤 중요한 대목이다 전공자라면 수업시간에 함수의 인수는 스택에 쌓인다는걸 배웠을 것이다 루아도 비슷한 느낌으로 스택을 사용한다 C++ 코드로, 루아에 변수를 할당하고싶다고 쳐보자. 그럼 lua_push로 시작하는 함수들을 이용해서 C++에서 계산한 값을 스택에 넣어주고, lua_setglobal같은 함수를 이용해서 스택에서 빼서 lua에 할당해준다. 예를들어보자 lua_pushnumber(.. 더보기
게임 개발시 최적화 관련 토막글 보통 게임을 만들때, 특히 출시까지 고려하게 되면 최적화는 피할 수 없는 문제가 된다. 그런데 내가 처음 게임을 만들때는 이런 기준이 전혀 잡히지 않아서 난감하고 막막했었다. 하지만 물론 게임마다 다르겠지만, 대략적으로 기준을 잡는 방법이 있다 아마 듣고 나면 당연해서 왜 생각 못했지 싶을 것 같다. 아무튼 상당히 명료한 기준이다. 바로 fps를 기준으로 잡으면 된다. 뭔소리고 하니, 일반적인 게임은 60fps 혹은 120fps정도로 맞춘다. 물론 그 이상의 프레임을 원하는 유저들도 있지만, 보통은 저정도 프레임률이 나오면 보통은 만족한다. 안드로이드는 60fps, pc는 120fps를 기준으로 잡으면 된다. fps는 초당 프레임률이기 때문에, fps를 역수 취해주면 프레임당 초가 나온다. 1/120= .. 더보기
[node.js] net 이벤트 정리 * 본 글은 제가 보기 위한 용도입니다. 강의가 아닙니다. 소켓.on('이벤트', 함수) 소켓에 이벤트 핸들러를 추가한다. '이벤트' 종류 - 서버 'listening' listen을 호출 후 발생 'connection' 연결 수립시 발생. 인수로 연결된 소켓을 받음 'close' 닫히면 발생. 'error' 에러 발생때 발생. close되지 않음. '이벤트' 종류 - 클라이언트 'close' 완전히 닫혔을때 발생 'connect' 소켓연결이 되면 발생. 'data' 데이터가 들어오면 발생 'drain' 더 읽을 데이터가 없으면 발생 'close' 소켓이 닫히면 발생 'lookup' 서버 정보를 확인해서 연결을 실제로 수행하기 직전에 발생 'ready' 소켓을 사용할 준비가 되면 발생. 커넥트 직후에 발.. 더보기
4. Exception을 지양하는 이유가 뭘까? 프로그래밍 공부를 하다보면 예외 처리라는 녀석을 배우게 된다. 요컨대 비정상적인 작동을 하게 되면, Exception이 발생하고 그걸 try catch로 붙잡아서 예외에 대한 처리를 해주는 거다. 편리해 보이는데 왜 쓰지 말라는걸까? 지양되는 이유는 간단하다. 대부분의 경우 예외처리를 굳이 쓰지 않아도 되기 때문이다. 예를들어, Queue에서 dequeue하는 경우를 생각해보자. try { q.dequeue(); } catch (Exception) { } 그러나 굳이 이렇게 해줄 필요가 없다. if(q.Count !=0)q.dequeue(); 이러면 되는 것이다. 예외 처리 구문은 그 자체로 꽤 뚱뚱하다. 성능면에서도 그렇겠지만 코드 길이도 if문을 써서 처리하는거보다 훨씬 뚱뚱하다. 게다가 익셉션 종류.. 더보기
3. C와 Call by Reference 보통 C라는 언어를 배울때, 이 얘기는 꼭 들어간다 함수를 호출할때 매개변수로 포인터를 넘길때, 이걸 Call by Reference라고 설명한다. 하지만 이 말엔 논란의 여지가 많다. 왜 많냐고 하면, C++의 참조자(영어로 Reference)나 타 언어의 레퍼런스랑 비교했을때 그 성격이 포인터는 많이 다르기 때문이다. 그냥 쉽게 생각해보자. 일단 레퍼런스가 뭘까? int a =5; int & b=a; b++; 이렇게 하면 a는 6이 된다. 즉 int a = 5; a++; 랑 의미적으로 동일하다. 다만 그걸 b라는 레퍼런스를 이용해서, 다른 이름을 지어주고 만지작 대는 셈이다. 왜 이런게 있느냐면, 보통 Call by Reference에 사용하기 때문이다. 이 레퍼런스를 함수의 인자로 넘겨주는게 Cal.. 더보기
FMOD 테스트코드 FMOD.Factory.System_Create(out sys); sys.init(512, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); FMOD.Sound snd; sys.createSound(Application.dataPath + "유니티파일경로", FMOD.MODE.CREATESAMPLE, out snd); FMOD.ChannelGroup cg; sys.createChannelGroup("ch", out cg); sys.playSound(snd,cg,false,out ch); 더보기
[Unity] PlayerPrefs를 빌드 파일에서 지워보자 빌드를 해보면 유니티 에디터랑 실제 빌드 파일이랑 PlayerPrefs가 따로논다는걸 쉽게 확인 할 수 있다. 보통 PlayerPrefs를 유니티 에디터에서 PlayerPrefs 수정하는건 유틸이나 스크립트로 쉽게 할 수 있다. 그러나 실제 빌드 파일의 PlayerPrefs는 살짝쿵 숨어져 있다. 일단 빌드파일의 PlayerPrefs가 저장되는 위치는 레지스트리다. 즉슨, 레지스트리를 건드려주면 된다는 얘기다. 그렇다면 당연히 레지스트리 편집기를 켜야한다. 이제 편집기를 실행한 후 다음 경로를 찾아보자. 프로젝트 세팅을 따로 해두지 않았다면, DefaultCompany>프로젝트 이름이 뜰 것이다. 만약 따로 세팅을 해두었다면 자신이 지정한 회사명으로 되어있다. 아무튼 저 경로로 들어간다. 고민하지 말고 .. 더보기
2. 사람들은 왜 동적 타이핑을 싫어할까? 안녕하세요, 푸불입니다. 최근에는 입문 언어가 Python이 대세가 되었습니다. 그리고 비교적 접근성이 좋다는 이유로 Javascript를 선호하는 경우도 많이 보입니다. 일단 기본적으로 이런 언어들은 동적 타이핑 언어입니다. 즉, 문자열인지, 정수인지, 실수인지 따위를 지정해줄 필요가 없는 언어라는 거죠. 그래서 입문자 입장에서는 자료형이라는 개념을 하나 덜어낼 수 있기 때문에 굉장히 라이트하게 느껴지는거고, 이런 언어들을 입문자 입장에선 쉽게쉽게 배울 수 있다는 겁니다. 하지만 이유는 모르겠지만, 파이썬이나 자바스크립트의 동적 타이핑을 가루가 되도록 까는 사람들을 가끔 만날 수 있습니다. 처음엔 이 상황이 이해가 안됩니다. 위에서 말했다 시피, 정적 타이핑보다 배우기 쉬운데 왜 싫어하지? 그래서 그 .. 더보기
1. 프로그래밍 언어와 구조적 프로그래밍 보통 처음 IT를 공부할 때는 대부분 프로그래밍 언어를 배웁니다. 누군가는 C를 배웠을 거고, 누군가는 Python배웠겠지만, 어쨌든 어떤 상용 언어를 공부했을 겁니다. 그런데, 대부분 이를 배우는데에 큰그림을 안그리고 시작합니다. 프로그래밍에 필요한 기본 요소들을, 그때그때 하나씩 조각조각 배웁니다. 변수가 나오니 변수를 공부하고, 그다음엔 자료형이 나오고, 그 다음엔 조건문이 나옵니다. 각각을 독립적으로 배우고, 나중에 취합하는 방식이고, 대부분 이렇게 배우셨을 겁니다. 그래서 배우고나서도 프로그래밍에 익숙하지 않아서 각 개념을 왜 배우는지를 모르겠다, 어떻게 쓰는지 모르겠다, 정리가 안되어 뭐가 뭔지 모르겠다고 생각하시는 분들도 종종 보이는거 같습니다. 그래서 이렇게 글을 통해서 각 프로그래밍 언어.. 더보기