[C++] 생성자/소멸자에서 virtual 함수 호출시 문제

생성자 또는 소멸자에서 가상(virtual) 함수 호출시 어떻게 될까요.  기술 면접에서 종종 나오는 질문이다.  얼핏 대답하기가 쉽지 않다.  컴파일 오류가 날 것 같지는 않은데, 왠지 실행시에 undefined behaviour가 날 것 같기도 하고, 상속 관계까지 생각하다 보면 머리가 복잡해진다.  코드 예제를 보면서 생각해보자. Base 클래스와 Derived 클래스를 만들고, Derived를 Base로 부터 상속받게 한다.  각 생성자와 소멸자에 로그를 심고, … Read more[C++] 생성자/소멸자에서 virtual 함수 호출시 문제

AI 캐릭터의 전략적 이동

AI Game Programming Wisdom [Steve Rabin, 2002, AI Game Programming Wisdom] 책에 나온 5.1섹션의 내용을 인용해 보고자 한다. 개념을 설명하는 부분과 개인적인 의견을 표현하는 부분으로 나누고, 의견 부분은 Italic체로 표현하였다.  그 섹션의 원제는 ‘Strategic and Tactical Reasoning with WayPoints’ (Lars Liden, page 210-220)로 번역하면, 지점에 대한 전략과 전술적 판단이라고 할 수 있다. AI 캐릭터가 타겟으로 잡은 … Read moreAI 캐릭터의 전략적 이동

[C++] A* 알고리즘의 구현

2002년에 발간된 AI Game Programming Wisdom이란 책은 한 번쯤 꼭 읽어 봐야 하는 책이다.  십수 년이 지난 책이지만 지금 이 순간에도 개발에 도움이 되는 이야기를 찾을 수 있다.   게임 AI에서 길찾기란 빼놓을 수 없는 부분이다.  A*(이하 A star) 알고리즘의 책 내용을 기반으로 구현을 해보았다.  개인적으로 책에 나와있는 코드 스닛핏은 아무리봐도 완전히 이해하기가 어려웠다.     참고로, … Read more[C++] A* 알고리즘의 구현

Xcode 멀티 버전 설치 & Command-line Default 버전 세팅

우선 필요한 버전의 Xcode를 찾아 다운을 받는다. https://developer.apple.com/download/more/?name=Xcode (로그인 필요) 원하는 버전을 클릭하고, 다운 로드 후, 압축을 풀면 Xcode.app가 생성된다.  파일 명을 버전에 따라 바꾸면 좋을 것이다 (Xcode_버젼.app). 그리고 응용 프로그램(Applications) 디렉토리 아래 Xcode 버전에 따라 나란히 배치해보자.  간단히 여러 버전의 XCode를 설치하였다.   이제 Command-line으로 Xcode를 실행할 때, 어떤 버전으로 실행할 지 세팅해보자.  현재 어떤 Xcode 경로로 … Read moreXcode 멀티 버전 설치 & Command-line Default 버전 세팅

도메인 정보 조회시 개인 정보 노출

도메인 등록 대행 업체(보통 호스팅 업체)를 통해 도메인을 등록 및 관리를 하고 있었는데, 뜻밖에 개인정보가 온라인 상에 노출되어 있는 것을 발견했다.  도메인을 가지고 있는 사람이라면 한번 자신의 도메인 정보을 찾아보자 (WHOIS조회).  나 같은 경우는 도메인 등록시 정직한 마음으로 추가한 나의 이름/주소/전화번호가 고스란히 노출되어 있었다.  아 이런 나의 무지함이란…  이름은 그렇다 치고 주소와 전화번호는 좀 심하지 … Read more도메인 정보 조회시 개인 정보 노출

언리얼 서밋 2019 프리미엄 참관 후기

언리얼 서밋 2019 프리미엄에 어렵사리(?) 다녀왔다.  언리얼을 공부하는 입장에 여러모로 도움이 될까싶어 이번엔 꼭 가보자고 했는데, 운좋게 가볼 수 있었다.  내가 이러한 컨퍼런스에서 얻고자하는 것은 기능에 대한 디테일한 설명보다는 기술 키워드나 추후에 필요에 따라 찾아 볼 수 있는 레퍼런스를 모아두기 위함이 크다.  그래서 이번 세션들을 들어보면서 몇 가지 나만의 키워드를 정리해 보고자 한다. 내가 꼽은 … Read more언리얼 서밋 2019 프리미엄 참관 후기

[iOS] iOS13에서 iOS12 메모리 카운팅 방식 강행

iOS11-style 메모리를 iOS12에서 사용하는 방식에 대해 언급한 적이 있었는 데, 최근 iOS13이 나오면서 메모리 카운트 방식의 변화가 있는지에 대해 간단히 알아보았다.  배경을 잠깐 설명하자면, iOS12가 나왔을 때, iOS11에서 하던 메모리 카운트 방식이 변경되면서 메모리가 대략 100Mb이상 크게 카운트되어 저사양 디바이스에서는 앱이 플레이 중에 종료되는 현상이 일어났다. iOS11-style 메모리 카운트 방식은 별도의 소명 요청을 통하여 받은 … Read more[iOS] iOS13에서 iOS12 메모리 카운팅 방식 강행

[SVN] 커맨드라인으로 저장소 스위치 하기

부제: Repository svn switch in command-line 윈도우에서는 TortoiseSVN이라는 GUI툴이 있어서 쉽게 스위치가 가능하다.  Mac에서도 여러 GUI툴이 있지만, 아직 TortoiseSVN같이 안정적인 기능을 가진 툴을 찾지 못했다 (왜 Mac용 TortoiseSVN은 없을까?).  그래서 매번 브랜치를 바꿀일이 있으면 Mac에서는 커맨드라인을 즐겨 쓰곤 한다. 로컬 저장소에 C:\svnrepo 라는 이름을 가진 체크아웃된 폴더가 있다고 하자.  체크아웃된 폴더라면 C:\svnrepo\.svn 이 존재한다.  보이지 않는 … Read more[SVN] 커맨드라인으로 저장소 스위치 하기

[C++] 클로져(Closures)가 그래서 무엇인가요

Effective Modern C++ 책에서 Lambdas (람다) 섹션쪽을 읽다 보면 Closures (클로져) 얘기가 많이 나온다.  C++ 에서 클로져가 정확히 뭘까.  어떤 이는 람다가 클로져라고 하기도 하고, 어떤 이는 캡쳐와 클로져를 같이 설명하면서 더 이해하기가 어려워지기도 한다.  검색을 이리저리 해보다가 이펙티브 책 시리즈의 저자 Scott Meyers 의 블로그에서 람다와 클로져에 대해 설명한 글을 보았다.  아마도 나같이 혼란스러워 하는 … Read more[C++] 클로져(Closures)가 그래서 무엇인가요

[iOS] ipa 파일에서 XCode 버전 확인하기

XCode버젼을 ipa에서 찾을 일이 자주 있지 않지만 막상 필요해서 찾고자 하면 기억이 안나곤 한다.  한번 정리해보자. 우선 Mac. Example.ipa라고 있다고 가정하면, 우클릭 하여 아카이브 유틸리티를 실행한다. 아카이브 유틸리티는 Mac OS의 기본 압축 관리자이다.  OS 버전에 따라서 파일의 위치는 다를 수 있으나, 10.14이상에서는 /System/Library/CoreService/Application/Archive Utility.app에서 찾을 수 있다. 아카이브 유틸리티를 이용하여, 압축을 풀면 Payload라는 폴더가 생긴다.  … Read more[iOS] ipa 파일에서 XCode 버전 확인하기