목록전체 글 (162)
Coding Memo
싱글턴 디자인 패턴은 어플리케이션 전체에서 단 하나만 존재해야하는 인스턴스를 위한 패턴이다. 특정 인터페이스를 제공한다거나 동일한 데이터를 사용할 때 한번만 로드할 때 사용한다. 보통은 전역적으로 접근 가능한 인스턴스를 사용한다. 또, 어플리케이션 시작 시점에 인스턴스를 로드할지, 이후에 사용할 때 로드 할지 (Lazy Intialization) 잘 고려하면 될 것이다. 싱글턴 패턴 구현은 언어와 개발 환경에 따라 크게 달라지는 것 같다.인스턴스를 1개로 제한하는 방법에는 인스턴스 카운트를 관리하는 코드를 추가하거나, static 전역 변수를 두어 이 인스턴스를 반환하여 사용하는 메서드를 만들면 될 것이다.보통 후자의 방법이 많이 사용되는 것 같다. 먼저 구현하는 코드를 살펴보자. struct Singl..
Fisher-Yates Shuffle (피셔 예이스 셔플) 알고리즘은 랜덤 값을 이용해, 배열을 uniform하게 섞을 수 있는 알고리즘이다. 한번 순환 (1 iterator)로 셔플을 완성할 수 있다. 매우 간단하다. 랜덤하게 숫자 하나를 뽑고 그 값을 인덱스로 치환한다음 그 값과 현재 값을 swap한다.// Fisher-Yates Shuffle Algorithmvoid Shuffle(std::vector& arr){ int n = arr.size(); for (int i = n - 1; i > 0; i--) { int j = rand() % (i + 1); swap(arr[i], arr[j]); }} 하나 주의할 점은 랜덤 값을 얻는 함수로 rand()를 사용했기 때문에 시드를 설정 해줘야 한..
에서 제공하는 std::sort 함수는 지정된 조건에 맞게 정렬을 해주는 함수이다.vector나 배열에서 사용은 많이 해보았을 것이라 생각한다. 그렇다면 std::sort는 과연 어떤 인자를 받고 있을까? 이 글에서는 std::sort의 작동방법과 왜 std::list에서는 사용할 수 없는지 알아보겠다.(Visual Studio MSVC 기준이다.)std::sort 이 함수는 헤더 파일에 다음과 같이 정의되어 있다._EXPORT_STD template _CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) { // order [_First, _Last) _Adl_verify_range(_First, _Last); c..
C++17부터 추가된 파일 시스템 라이브러리에서 파일과 디렉터리에 관한 여러가지 유틸을 사용할 수 있다.자주 사용할 것 같은 메서드와 멤버 변수들을 간단하게 정리해 보았다.HeaderfilesystemNamespacestd::filesystem1. 현재 경로 (working directory, current path) current_path()현재 실행중인 경로(working directory)를 반환한다. (return: std::filesystem::path)참고로, 반환된 경로는 절대 경로(absolute path)이다. current_path(const std::filesystem::path& p)현재 경로를 p로 변경한다. (return: void)마찬가지로 p가 상대경로로 지정했더라도 curr..
Dynamic Library (dll) - dllexport / dllimport (MSVC)__declspec(dllexport)와 __declspec(dllimport)는 MSVC(Microsoft Visaul C++) 컴파일러에서 사용하는 키워드이다. 동적 라이브러리(dynamic library)에서 클래스나 메서드, 변수를 내보내거나 가져올 때 사용된다.(보통 Windows에서 사용하고, GCC나 Clang에서는 __attribute__((visibility("default"))) 등을 사용) 간단히 말하면, 라이브러리에서 dll을 빌드할 때는 __declspec(dllexport) 키워드를 클래스 이름이나 메서드 원본 앞, 멤버 변수 앞 등에 붙여서 해당 내용을 외부에서 사용하도록 내보내겠다는 ..

UnityWebRequest.Post()를 사용하여 웹 서버에 응답을 요청했을 때, 다음과 같은 에러가 나타날 수도 있다.(나타나지 않을 때도 있어서 이유를 찾는데 오래 걸렸다...) A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details. 에러에 나와있듯이, stack traces를 full로 설정하고 editor log나 player log를 확인을 했지만, 아래 에러 이상의 내용이 전혀 나타나지 않았다.(...)또한, 어떤 컬렉션이 누수를 발생시키고 있는지도 알 수가 없었다.... 이 문제를 해결하면서 살펴본 코드는 다음 포스트에 있다.https:/..
이 글은 해당 에러를 확인하면서, 정리한 글이다. 먼저 내가 사용했던 코드를 다시 한번 살펴보자.public IEnumerator PostCo(string url, T data, Action callback){ string json = Newtonsoft.Json.JsonConvert.SerializeObject(data); using (UnityWebRequest request = UnityWebRequest.Post(url, json)) { byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json); request.uploadHandler = new UploadHandlerRaw(bodyRaw); req..
Unity에서 UnityWebRequest를 통해, Https 연결을 요청할 때, 다음과 같은 에러가 발생 할 수 있다.Curl error 60: Cert verify failed. Certificate Common Name(CN) does not match with the expected CN. UnityTls error code: 7 이 에러는 말그대로 Https 연결 시, 인증 문제로 나타나는 에러이다.단순히 말해서, SSL 인증서 문제이다. 때때로, 이 에러는 자신의 컴퓨터의 루프백 주소(127.0.0.1)을 이용할 때 나타나기도 한다. 간단히 자신의 컴퓨터로 테스트를 해보고 싶은데 해당 에러가 뜬 다면, 다음 2가지 방법으로 해결 할 수 있다. 1. 루프백 주소(127.0.0.1) 대신, "lo..