// 개인 필기용 포스트입니다 MySQL 모니터란? MySQL 데이터베이스가 서버라면, 해당 서버에 접근하기 위한 클라이언트 역할을 해주는 도구. 하나의 MySQL 서버에는 여러 개의 데이터베이스들이 존재할 수 있고, 하나의 데이터베이스에는 여러 개의 테이블이 존재할 수 있다. MySQL 모니터를 사용하려면? 1. 콘솔(CMD 등)을 통해 mysql이 설되어있는 폴더로 이동한다. 2. mysql/bin으로 이동한다. (bin 폴더 내부에 mysql.exe가 설치되어있다면 제대로 하고 있는 중이다) 3. 콘솔에 "mysql -h 서버주소 -u 사용자명 -p 비밀번호" 입력 ** 주의) 보안상의 문제 때문에 -p 뒤에 비밀번호를 함께 입력하지 않는 것이 권장된다..
프로세스(Process) 운영체제로부터 메모리를 할당받아 실행되는 작업(task)의 단위. 더보기 Task vs Process 호기심에 찾아보았는데, task와 process는 거의 같은 의미로 사용되지만 엄밀히 따졌을 때 약간의 차이가 있다고 한다. Process는 메모리 상에서 Input/output 작업을 포함하지 않고 실행되는 작업을 의미하고, Task는 Input/output을 포함하는 작업을 의미한다. 따라서 "멀티태스킹" 이 가능하다는 것은 동시에 여러 I/O Stream을 실행할 수 있다는 것을 의미하고, "멀티프로세싱"이 가능하다는 것은 동시에 여러 프로세스에서 연산이 일어날 수는 있지만, I/O Stream은 하나만 존재하며 이를 여러 프로세스에서 바꿔가며 사용한다는 것을 의미한다. "..
본 포스트는 개인 학습 기록용으로 작성되었습니다, 오류가 있을 수 있습니다 ARC와 GC는 모두 메모리를 자동으로 제어해주는 수단이다. 그러나 이 두가지 방식에는 약간의 차이가 있다. *ARC를 GC의 한 방식이라고 보는 시점도 있지만, 본 포스트에서는 둘을 구분해서 작성했습니다. ARC(Automatic Reference Counting) ARC는 컴파일 과정에서 코드를 분석해 각 객체들의 참조 횟수(레퍼런스 카운트)를 기록하고 참조 횟수가 0이 되면 해당 객체가 메모리 상에서 해제되도록 추가적인 코드를 삽입하는 방식이다. 객체가 다른 곳에서 참조된다면 참조 횟수를 증가시키고, 한 번 참조된 객체가 다시 사용되지 않을 때에는 참조횟수를 감소시킨다. 이때 만약 어떤 객체의 참조 횟수가 0이 된다면, 해당..
GIL을 이해하기 전에 알아야 할 개념들: 쓰레드(Thread)와 프로세스(Process), 멀티 스레딩 ARC(Automatic Reference Counting) GIL이란? 파이썬은 하나의 프로세스에서 한번에 딱 하나의 스레드만이 실행되도록 제한을 걸어둔다. 이를 GIL(Global Interpreter Lock)이라고 부른다. 주의해야 할 점은, GIL은 여러 스레드의 생성 자체를 막는 게 아니라는 점이다. GIL은 어디까지나 여러 스레드가 동시에(Parallel) 실행되는 것을 방지하는 것 뿐이기 때문에, I/O 가 존재하는 프로그램에서는 설사 파이썬으로 작성되었다고 하더라도 여전히 스레딩을 통한 성능 향상을 기대할 수 있다. 왜 GIL이 존재하는가? GIL의 존재이유는 여러가지가 있지만, 가장..
동적 바인딩(늦은 바인딩)이란? 컴파일 단계에서 변수/함수의 메모리 주소가 결정되는 것을 이른 바인딩(Early binding)이라고 한다. 이와 반대로 컴파일 이후 프로그램 실행 도중에 변수/함수의 메모리 주소가 결정되는 것을 동적 바인딩(Dynamic binding)이라고 한다. #include using namespace std; void TestFunc() { cout
함수 포인터란? 말 그대로 함수를 가리키는 포인터이다. 코드를 통해 사용방법을 설명하겠다. void PrintNumber(int n) { std::cout Vtable 값에는 Apple::Hello()를 가리키는 함수 포인터가 저장된다. 그리고 *apple->__vfptr은 기존에 가리키던 Vtable 대신 새로 생긴 Vtable을 가리킨다. 이러한 과정을 거친 후 apple->Hello()를 실행하면 Vtable에 저장된 데이터를 통해 우리가 실행해야 하는 함수가 Apple::Hello()라는 것을 알 수 있고, 덕분에 virtual 키워드가 정상적으로 작동하게 되는 것이다.
문제1 문자열이 주어질 때, 해당 문자열 내에서 같은 문자가 두 번 연속해서 반복될 경우 이를 제거하고 남은 문자열을 반환하시오. 이 때 pop하는 것으로 인해 또다른 Adjacent Duplicates가 생겨났다면 그 문자들도 pop해서 반환하시오. ex. abbaca aaca ca 문제2 *문제2는 문제1의 상위호환이다 문자열이 주어지고, 자연수 k가 주어질 때, 문자열에서 k번 연달아 겹치는 문자들을 pop하고 남은 문자열을 반환하시오. 이 때 pop하는 것으로 인해 또다른 Adjacent Duplicates가 생겨났다면 그 문자들도 pop해서 반환하시오. ex. k = 3일때 abbbaacda가 주어졌다면 abbbaacda aaacda cda 풀이 문제1, 2 모두 stack 하나만을 사용해서 풀..
개발 기간: 2020. 12월경 개발 소요시간: 3시간 개발 엔진: 유니티 개발 언어: C# 개발 목적: 유니티 엔진의 기초적인 사용법을 익히기 위해 게임 소개: "Aerial Rocket"이라는 가제로 제작된 게임 프로토타입입니다. 로켓을 쏴서 적을 공중에 띄우고 공중의 적을 맞추어 죽이는 하이퍼FPS 게임을 목표로 시험삼아 제작해보았으며, 완성된 게임을 만들기보다는 중요한 기능들을 구현해보는 데 초점을 두었습니다. 안정적으로 작동하는 1인칭 플레이어 컨트롤러, 투사체 발사 기능, 로켓 넉백, 로켓 점프 등 게임의 코어 요소들을 제작해보았고, Mirror API를 활용해 LAN 서버를 통한 아주 간단한 멀티플레이 기능도 추가해보았습니다. (서버 관련 API를 사용해보는 것에 의미를 두었기 때문에 제대로..
어느덧 2020년도 끝나가네요... 어느 때보다도 정신없이 한 해가 지나간 것 같습니다. 2020년은 게임이라는 매체에게도 다사다난했던 해였습니다. 게임 산업은 2020년을 기점으로 큰 전환점을 맞았다고 말할 수 있을 정도로 2020년의 다양한 사건들이 게임 전반에 미친 영향은 대단히 크다고 생각합니다. 코로나로 인한 신규 게이머 대거 유입을 비롯해 플레이스테이션5와 엑스박스X의 출시, 언리얼 엔진5의 공개, 각종 문제들에 휘말린 여러 트리플A 게임들까지, 2020년은 굵직굵직한 사건들로 게임 산업 전반을 뒤흔들어 놓았습니다. 하지만 개인적으로는 2020년에서 주목해야 할 가장 흥미로운 부분은 바로 "코로나로 인한 게임 트랜드의 변화"라고 생각합니다. 2020년의 어떻게 게임 트랜드는 어떠했는지, 코로나..
개발 기간: 2020. 9월 경부터 시간 날때마다 틈틈히 제작 개발 소요시간: 약 30시간 개발 엔진: 언리얼 엔진4 개발 언어: C++ 90%, 블루프린트 10% 개발 목적: 언리얼 엔진의 사용법과 언리얼4의 C++ 문법들을 익히기 https://www.youtube.com/watch?v=W14sIYrtRhE https://www.youtube.com/watch?v=W14sIYrtRhE 구현한 기능들: AnimMontage, Blendspace를 이용한 캐릭터 애니메이션 캐릭터 걷기, 달리기, 점프 체력, 스태미나 시스템 UMG를 사용한 간단한 UI 접촉 시 파괴되는 엔티티들 (폭탄, 동전, 검) 스위치를 밟으면 열리는 문 움직이는 플랫폼 간단한 효과음 사용 플레이어를 쫓아오는 AI 콜리전을 이용한 근..
문제 닫힌 괄호와 열린 괄호, 그리고 알파벳들이 나열되어있는 문자열이 주어졌을 때, 괄호가 반드시 열리고 닫히도록 문자열을 수정하시오. ex. "({a)(b})" -> "(a)(b)" ")))(((" -> "" "h(e(l)l)o)" -> "h(e(l)l)o" 풀이 Stack을 이용한다. "h(e(l)l)o)(()" -> "h(e(l)l)o()" 의 경우 ( 와 같은 열린 괄호: stack에 추가 )와 같은 닫힌 괄호: stack에서 pop 위 예시의 경우 h(e(l)l)까지 진행했을때 "(" "( (" "(" " " 의 순서를 거치며 스택에서 정상적으로 아이템이 추가되고 pop됨. 하지만 그다음 o)에서 스택에서 pop을 할 수 가 없는데, 이럴 경우 문자열에서 해당 괄호 h(e(l)l)o)(() 를 ..
본 게시글에서는 이 문제에 대한 두 가지 접근을 다룹니다. 첫 번째 접근은 제가 생각해낸 방식이고, 두 번째 접근은 풀이에서 제시된 방식입니다. 문제 문자열을 같은 알파벳이 겹치지 않도록 재배열하시오. ex) aabbcc -> abcabc / acbcba 등... 만약 주어진 조건을 만족하도록 재배열할 수 없다면 empty string을 반환하시오. 내가 생각해낸 방식 1. 두 포인터 변수 ptr1과 ptr2를 정의한다. 각 포인터를 문자열의 0번, 1번 인덱스를 가리키는 상태로 초기화한다. (포인터 변수 대신 인덱스의 값을 저장하는 int형 변수도 가능하다) 2. A. ptr1과 ptr2가 가리키는 알파벳의 종류가 같다면 ptr2가 가리키는 알파벳을 문자열의 가장 뒤로 보내고 ptr2를 ptr1이 가리..