본문 바로가기

All250

Unity Build(유니티 빌드)란? C/C++에서 유니티 빌드라는 시스템이 있다. 여기서 유니티는 유니티 엔진의 유니티가 아니다. 여기서 유니티는 하나로 뭉쳐서 빌드한다는 뜻이다. C/C++과 같이 소스 파일이 헤더 파일을 포함하는 시스템의 경우 컴파일이 오래 걸릴 수 있다는 특징이 있다. 이러한 시스템의 빌드는 컴파일과 링크 과정으로 나뉘는데, 컴파일은 소스 파일(.cpp) 단위로 컴파일이 된다. 그런데 각 소스 파일들은 보통 헤더 파일을 include 한다. include는 단순히 컴파일 전에 컴파일러가 헤더 파일의 내용을 그대로 소스 파일에 복사하는 역할이다. 만약 10개의 소스 파일이 각각 동일한 헤더 파일을 모두 include하고 있다면 동일한 헤더의 내용이 10개의 소스 파일에 모두 복사가 되고, 10개의 소스 파일이 각자 컴파.. 2021. 11. 14.
프로토타입(prototype) 패턴 적용 상속 관계의 오브젝트들을 생성할 때 아래와 같이 switch case를 이용했었는데 프로토타입 패턴에 대해 알게 되었다! 그리고 바로 이 부분을 수정해야겠다는 생각이 들었다. obj 타입에 따라 아래와 같이 샘플 데이터를 이용해 타입에 맞게 복사 생성했었는데 새로운 클래스를 만들 때 마다 아래와 같이 추가를 해주어야 한다는 단점이 있었다. 이걸 구현할 때도 뭔가 다른 방법이 있을 거라는 생각이 들긴 했던 것 같다.. switch (obj) { case ON_CUBE: pObj = new Cube(*(Cube*)pSample); // 샘플 객체를 해당 타입으로 형변환 후 복사 생성 break; case ON_TILE: pObj = new Tile(*(Tile*)pSample); break; default:.. 2021. 11. 6.
윈도우 메모리 릭 디버깅 슬라이드셰어 https://www.slideshare.net/seao/ndc18-95258747 [NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 NDC 2018 서버야, 아프지마 - 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 www.slideshare.net 2021. 10. 4.
Lock 기반 알고리즘의 문제점 lock-free란 키워드가 궁금해서 찾아보던 도중 알아두어야 할 내용인 것 같아 메모 공유 자원이 여러 스레드에 의해 점유되는 현상을 막기 위해 mutex나 semaphore를 이용하여 lock을 걸어 사용할 수 있다. 고성능이 요구되지 않는 환경에선 좋은 방법일 수 있지만, 고성능이 필요한 환경에선 좋은 방법이 아닐 수 있다. 어떤 스레드가 lock을 얻으면 다른 스레드들은 lock을 가진 스레드가 unlock을 할 때까지 해당 자원에 접근하지 못한다. unlock 이후 lock을 얻더라도 스케줄러에 의해 CPU를 할당받지 못하면 lock을 소유한 채로 기다려야 한다. 심지어 스케줄링 우선 순위가 밀리게 되면 해야하는 동작을 하지 않고 있음에도 lock을 소유하고 있고, 다른 스레드 들은 계속해서 대.. 2021. 9. 29.
[Medium] 5. Longest Palindromic Substring 길이 [1, 1000] 범위의 문자열 s가 주어지면, 그 안에서 가장 긴 팰린드롬을 찾아 반환하는 문제이다. 팰린드롬이란 "aba", "abba", "eye"처럼 거꾸로 읽어도 동일한 단어를 말한다. 문제 유형은 DP로 분류되어 있었는데, 처음엔 DP로는 어떻게 풀지 방법이 생각이 안나서 그냥 나이브한 방법으로 풀었고, 두 번째에는 디스커션을 확인하여 DP로 풀었다. 1) 우선 내가 푼 방법이다. 나는 s의 첫 문자부터 시작해서 끝까지 순회를 할 것이다. 현재 문자가 s[i]라면 맨 뒤에서부터 s[i]와 동일한 문자를 찾는다. 찾은 위치의 인덱스가 j라고 했을 때, [i, j] 범위를 검사하여 팰린드롬인지 확인한다. s[j]는 가장 뒤에서부터 찾은 문자이므로 s[i]에 대해선 가장 긴 팰린드롬이 된다. .. 2021. 9. 27.
[Easy] 338. Counting Bits int타입 n이 주어지면 n+1 길이의 int형 배열을 생성하고 이 배열의 i번 째 원소를 i를 이진수로 나타내었을 때 1의 개수로 채워서 반환하는 문제이다. 즉 3번째 원소는 3(0011)의 1의 개수인 2이다. 처음엔 그냥 쉽게 bitset 클래스를 이용하여 풀었는데, 분류가 DP로 되어 있어서 DP 풀이법을 봤더니 내 머리로는 생각도 못했을 방법이었다. 우선 bottom-up 방식으로 낮은 원소부터 채운다. 그리고 i번째 값은 두 부분으로 나누어서 구한다. 한 부분은 첫 번째 비트 부분이고 한 부분은 나머지 비트 부분이다. 예를 들어 i가 3일 경우, 3을 2로 나눈다. 2로 나누는 것은 1bit만큼 right shift 하는 것과 같다. 그러면 0011이 0001이 되고 이는 십진수로 1이다. 그.. 2021. 9. 26.