[C++] 스마트 포인터
·
Study/C++ & C#
이전에 「*」을 사용하는 전통적 포인터 개념을 복습했다. 하지만 요즘의 C++ 프로젝트에선 스마트 포인터가 대세가 된 지 오래. 언리얼 엔진도 소스코드를 들여다보면 스마트 포인터로 가득하다. 정말 중요한 개념이라 할 수 있는 스마트 포인터에 대해 복습해 보자. 1. 스마트 포인터의 필요성 먼저 기존의 포인터를 사용하는 환경을 아래와 같은 코드로 구성했다. #include class Player { public: Player() { std::cout
[C++] 다중 포인터
·
Study/C++ & C#
스마트 포인터로 바로 가려다가 역시 다중 포인터도 빼먹을 수 없다고 생각해 먼저 작성 다중 포인터란? 포인터를 가리키는 포인터를 두고 '다중 포인터'라고 부른다. 겨우 포인터라는 큰 장벽을 넘어왔는데, 더 커다란 무언가가 앞길을 가로막는 느낌이다. 하지만 어렵게 느낄 이유는 없다. 포인터를 잘 이해하고 넘어왔다면 헤매지 않을 것이다. 다중 포인터 선언 포인터에 「 * 」을 하나 더 붙이면 그게 다중 포인터다. // 변수 생성 const char* ch = "BVM"; // 다중 포인터 // pp[&ch] / 8Byte // ch[BVM의 주소] / 8Byte // .rdata [B][V][M][\0] const char** pp = &ch; 일반 포인터 ch를 선언하고 그 주소를 갖고있는 다중 포인터 p..
[C++] 포인터 기초
·
Study/C++ & C#
근래 C++에 대한 감각이 무뎌지는 듯해서 내가 복습하는 내용을 정리할 예정. 포인터란? 포인터(Pointer)는 단적으로 말해 주소를 가리키는(Point) 변수라 할 수 있다. 우리가 늘 보는 마우스 포인터를 생각할 수 있겠다. 마우스 포인터가 아이콘이나 버튼을 가리키듯이 포인터는 주소를 가리킨다. 처음 프로그래밍을 배울 때 포인터가 어려운 이유는 포인터가 완전히 다른 개념이라고 생각하기 때문이다. 포인터를 늘 보던 변수라고 생각하자 포인터에 사용되는 뭔가 특별한 장치가 있는 것이 아니다. 이는 그저 int형 변수가 정수를 갖고 있듯이 주소를 갖고 있다. 단순히 우리가 배울 때 '포인터는 가리키는 것' 이라는 개념에 정신이 팔려서 이해가 잘 되지 않았던 것이다. 포인터가 단순히 변수와 다르지 않다는 것..
[Python] 봇의 명령어 실행 결과를 csv 형식으로 저장하기
·
Study/Python
개발했던 봇의 줄 서는 기능을 보완하는 느낌으로 결과를 DB처럼 저장하면 괜찮겠다는 생각이 떠올랐다. 그렇다고 해서 DB까지 갈 필요까진 없는 일이라서 csv 형식으로 결과를 저장하고자 했다. Pandas 파이썬에서 기본으로 제공하는 csv 도구를 이용해도 되지만, Pandas가 정말 많이 쓰인다고 해서 이걸 사용하기로 했다. 나에게 필요한 기능은 다음과 같다. csv 파일을 읽는다. 없으면 템플릿대로 생성 줄의 결과가 나온다. 템플릿에 맞게 데이터프레임에 추가. csv에 데이터프레임 저장 난 읽기/쓰기의 기능만을 수행할 클래스인 pdCsv를 만들었다. def load_csv(guild_id): pdCsv.addr = f'./results/{guild_id}.csv' if(not os.path.exist..
[Python] CLOUDTYPE으로 디스코드 봇 배포
·
Study/Python
봇들 다 만들긴 했는데, 그냥 시험용 프로젝트가 아니라 실제로 사용할 봇인 만큼, 꺼뒀다가 사용할 때마다 켤 순 없으니 어딘가 올려서 24/7 온라인 상태로 유지해야 했다. pythonanywhere의 경우, 무료 플랜은 프록시 연결을 사용하기 때문에 디스코드 서버에 연결할 수 없었다. 갖고 있는 라즈베리 파이에 우분투 서버를 올려서 유지를 할까 생각도 했지만, 뭔가 내키지 않았다. 그러다 발견한 곳이 클라우드타입이다. 국내 기업이 서비스 하는 곳이기도 하고 별도 요금이 없고 간단하게 배포가 가능해서 선택했다. 파이썬을 3.11까지 자유롭게 선택할 수 있는 점도 메리트. 사실 처음부터 클라우드타입을 선택한 것은 아니었다. 이전 글을 보면 알겠지만 원래 C#으로 만든 파파고 번역 라이브러리를 올려 사용하는..
[C#, Python] C# 라이브러리를 이용한 discord.py 봇 개발 (2/2)
·
Study/C++ & C#
1번 글에서 예고한 대로 이번 글에서는 앞서 만든 라이브러리와 discord.py를 활용한 봇을 개발에 관한 내용을 기술한다. 파이썬에 C# 라이브러리를 올리기 위해 pythonnet - Python.NET을 사용했다. VS2022로 라이브러리를 테스트하던 중, 자꾸 에러가 나서 닷넷 버전 문제인 것 같아 VS2019에서 4.8 환경에서 빌드 후 테스트 하니 잘 동작했다. 혹시 이 글을 본 사람 중 이런 시도를 할 사람이 있다면 닷넷 4.* 버전을 사용하길 바란다... dll 임포트는 아래와 같은 코드로 할 수 있다. import clr clr.AddReference("kord") from kord import Translator trns = Translator(TR_Cliend_Id, TR_Cliend..
[C#, Python] C# 라이브러리를 이용한 discord.py 봇 개발 (1/2)
·
Study/C++ & C#
예전에 만들었던 한>중>한 번역기를 개선하기로 했다. 하는 김에 디스코드 봇도 개발하기로 결정했다. 사실 예전에 discord.js로 개발하다 도저히 내 맘대로 되지 않아서 방치해 두었기에 그런 실패도 극복해보고 싶었다. 단순히 discord.py를 이용해 봇을 개발한다면 전부 다 파이썬으로 개발해도 된다. 그런데 왠지 C# 으로 만들어놓은 것을 다시 파이썬으로 옮기기 귀찮았고 파이썬 상에서 dll을 활용하는 방법이 공부가 되지 않을까... 생각했다. 이번엔 글을 2 파트로 나눴고, 1에서는 라이브러리 개선사항을, 2에서는 봇 관련 내용으로 채울 예정이다. 기존에 쓰던 바이두 번역 API를 사용할 수 없게 되어서 파파고 API로 교체했다. 사용하기는 확실히 이쪽이 편한 듯. 교체하면서 코드 구조도 살짝 ..
[C#] WPF로 만들어 본 한>중>한 번역기
·
Study/C++ & C#
뭔가 새로 만들어 볼 것을 찾다가 문득 떠올랐다. 콜옵 같은 게임을 하다보면 바이두 번역기로 한국어로 번역해서 잡소리를 하는 중화대협들을 많이 볼 수 있다. 내가 한장 플레이하던 때는 바이두 번역기의 중>한 번역의 성능이 그리 좋지 못했기 때문에, 저 이미지처럼 띄어쓰기가 제대로 안되는 문제가 있었고 그게 재밌는 점이었다. 그런 생각이 들어서 "저걸 웹에 가서 수작업 하긴 귀찮으니 원버튼으로 만들어야지." 하고 만들기로 했다. 처음엔 웹 번역기에 사용되는 요청들을 모방하려고 했는데 뭔가 이상하게 잘 안됐다. 파파고는 잘 됐는데.... 그래서 그냥 바이두에서 제공하는 API를 이용하기로 했다. 예전에 쓸 일이 있어서 만들어 둔 아이디가 있었기 때문에 그 아이디를 사용해서 개발자로 등록했...으면 좋았을텐데..