전체 글
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgu8Ho%2FbtsDp4KGKqc%2FYYnv3wyobOj0FizfQk9eh0%2Fimg.png)
[C] 키 입력받는 함수 GetAsyncKeyState, GetKeyState
GetAsyncKeyState SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 된다.) 가상 키코드 모음 반환값은 아래와같이 4가지로 나뉜다. 이전에 누른 적이 없고 호출 시점에서 눌린 상태, 즉 키가 눌려진 시점에서 0x8000을 반환한다. 만약 이전에도 누른 적이 있고 호출 시점에서도 눌렸으면 0x8001을 반환한다. 이전에 키를 눌렀으면 0x0001을 반환하고, 눌리지 않았다면 0x0000을 반환한다. Get..
[LeetCode] 1239. Maximum Length of a Concatenated String with Unique Characters
시간 복잡도) O(n * n2) 공간 복잡도) O(n) class Solution { public: int ans = 0; bool isUnique(string s) { set st(s.begin(), s.end()); return (st.size() == s.length()); } // 백트래킹 void solve(vector& arr, int index = 0, string s = "") { if (!isUnique(s)) return; ans = max(ans, (int)s.length()); for (int i = index; i < arr.size(); i++) solve(arr, i + 1, s + arr[i]); } int maxLength(vector& arr) { solve(arr); r..
[C#] String Interning
C#의 string.Intern 이라는 메서드는 문자열 풀에서 문자열을 풀링시켜 메모리를 아끼고 메모리 비교를 더 빠르게 해준다. 쓰는건 정말 간단하다. a = string.Intern("this is string") 으로 문자열을 넘기면 끝이다. 간단하게 퍼포먼스 비교를 해보자. string a = "dolphin"; string b = "dol"; b += "phin"; bool res = false; var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 100000000; i++) res = a == b; sw.Stop(); Console.WriteLine("Before intern:"); Console.WriteLine(sw.ElapsedMilli..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh9xHg%2FbtsCUxU83Eu%2FzG0XTdqXXlVVrCx4hiKhg1%2Fimg.jpg)
[C#] 고성능 서버 - __FILE__, __LINE__ 대체제
UI가 없는 서버에서 동작의 내용을 확인하는 가장 기본적인 방법은 file로 남기는 log다. 정상 동작이나 오류상황에 대한 상세한 로그가 남아야 문제가 생겼을 때 파악하기가 쉽기 때문에, 간단한 동작이지만 아주 빈번하게 호출되는 부분이다. 로그 출력에서 성능을 많이 빼앗기지 않도록 기반을 다져놓으면 비즈니스 로직 구현을 위해 더 많은 H/W 리소스를 배분할 수 있다. 성능을 굳이 신경쓰지 않는다면 아래 있는 내용을 끝까지 모두 적용할 필요는 없다. 콜스택을 얻어와서 가장 마지막 함수를 찍는 방법 현재 스레드 컨텍스트에서의 StackFrame 정보를 얻어온 후, 프레임 데이터의 가장 마지막 부분을 읽어 호출자의 정보를 얻어낼 수 있다. 가장 태초부터 있었던 방법이기 때문에 C#으로 함수 호출 위치를 얻어..
[Unity] DOTS: Jobs, Burst, ECS 간단 정리
DOTS: 데이터 지향 기술 스택 DOTS는 데이터 지향 구현을 돕는 기술들을 지칭하는 용어 데이터 지향 설계(DOD)를 통해 메모리 사용성 향상 → 성능 극적 향상 Unity의 DOTS: Job System, Burst Compiler, ECS 각각의 기술들이 독립적이기 때문에 셋을 반드시 함께 사용해야 할 필요는 없다. 즉, Jobs, Burst 없이 ECS를 사용할 수 있고, ECS 없이 Jobs, Burst를 사용할 수 있다. 그저 이 세 가지가 DOD 관점에서 궁합이 아주 좋기 때문에 다같이 사용하기를 권장하는 것이다. - Job System : 멀티스레딩 여러 작업을 Job이라는 단위로 나눠 여러 스레드에 할당해주는 시스템. 데이터 지향으로 설계되어 있는 경우에 Job을 스레드에 할당하는 작업..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4BXXa%2FbtsCZjPaRkk%2Foh3CpYjzif33teZzqVrBk1%2Fimg.png)
[Unity] ThreadPool (스레드풀)
스레드를 사용하기 위해선 다음과 같이 선언 해줘야한다. using System.Threading; 스레드 선언하기 Thread t = new Thread(MainTread); 스레드를 사용하기 위해 다음과 같이 스레드 생성자를 만든다. 넘겨주는 MainTread 함수 또한 생성한다. static void MainTread(object state) { Console.WriteLine("Hello Thread!"); } 기본 스레드는 foreground에서 실행되는 형태이다. 스레드의 이름을 설정하고 싶으면 Name 을 활용한다. static void Main(string[] args) { Thread t = new Thread(MainTread); t.Name = "Test Thread"; //이름을 설정..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjIgYT%2FbtsC009fj1W%2Fh3NiKFxt1eSMXYFq4mYApK%2Fimg.jpg)
프로그램 (Program) 이란?
컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음. 컴퓨터 프로그램이란 컴퓨터 안에 있는 논리적인 기계라고 볼 수 있다. 기계를 작동시키면 설계된대로 작동한다. 컴퓨터 프로그램도 마찬가지로 수동적으로 적혀진 명령어 대로 작동한다. 다만 너무 빨리 입력받고 처리해서 능동적으로 보일 뿐이다. 프로그램의 종류 크게 시스템 프로그램과 응용 프로그램으로 나뉘어져 있다. 시스템 프로그램이란 컴퓨터 시스템과 하드웨어들을 스스로 제어 및 관리하는 프로그램들을 말한다. 윈도우, 리눅스 같은 운영체제나 장치 드라이버, 컴파일러, 링커 등이 있다. 응용 프로그램이란 사용자가 원하는 기능을 제공하는 프로그램으로 실행하는 동안 지속적으로 컴퓨터의 성능을 소비한다. 워드, 엑셀, 포토샵, 게임, 브라우저 등이 있다. http..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDxOsz%2FbtsCQq1wZbm%2FsQvgErMI3lLhANiSBJxum0%2Fimg.png)
[SQL] 데이터베이스 키(KEY) 종류
Key의 종류슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.<p data-ke-size="si..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl7VOJ%2FbtsCQ2lSjRc%2FXXMJzUiCuHY8KZuDFN0oJ1%2Fimg.png)
[SQL] DATETIME 원하는 유형으로 변경 (YYMMDD)
MySQL에서 DATETIME 타입은 YYYY-MM-DD hh:mm:ss 와 같은 형식으로 반환한다.<ul style="..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3H5N%2FbtsCtcBKpma%2FyldM9WSCEGl8OVvDqRkky0%2Fimg.png)
[C++] inline (인라인) 함수란
inline 함수는 C++의 실행 속도 개선을 위해 등장 했다. C++에서는 기본적으로 클래스 선언을 통한 맴버함수가 많이 이용되는데, 이러한 경우 보통 간단한 기능을 하는 함수들이 많이 만들어지게 된다. 예) 생성자, getter(), setter(), print() 등 과같은 간단한 함수. 함수들이 간결하여 실행속도에 영향을 끼지지 않을 것 같지만 함수 호출 과정에서 프로그램 속도가 떨어지게 된다. 함수의 호출은 다음과 같이 진행된다. #include int fnc_1(int a, int b){ //매개변수 스택에 저장 return a + b; //리턴 값을 임시 저장소에 저장. } int main(void){ int num; num = fnc_1(5,1); //함수 호출 시점, 이곳의 주소값을 스택..