카테고리
유니티 Mono Editor대신 VS Code 사용하기
2016. 8. 4.Window에서 유니티(Unity)로 게임을 개발하는 분들은 신의 IDE라고 불리는 Visual Studio로 개발을 하게 되지만 Mac에서는 Visual Studio를 사용할 수 없다. 특히, Unity의 Mono Editor를 사용할 때면 정말 VS가 그리워지는데, 모노가 생각보다 좋은 개발 경험을 주지 않기 때문이다. 대략 단점을 정리해보자면 1. 느리다. 여러가지 기능이 재공되지만 기능에 비해 많이 느리다는 느낌을 준다.2. 잘 죽는다. 왜 크래시가 나는지 모르겠지만, 엄청 자주 죽는다. 이때 오토 세이브가 없었다면....3. UI 커스텀이 제한적이다. UI 테마 커스텀이 너무 제한적이다. (Xcode도 마찬가지...)4. 한글을 쓸 수 없다. 간단하게 주석을 달거나 유니코드 문자열을 간단하게 이..
팩토리 메소드 패턴 [Factory Method] : 자식 클래스에서 인스턴스 생성하기
2016. 8. 4.Template Method 패턴에서 부모 클래스에서 알고리즘의 레이아웃을 정하고 자식 클래스에서 구체적인 구현을 하였다. Template Method 인스턴스 생성에 적용한 패턴이 바로 Factory Method 패턴이다. 이전에 Template Method 패턴과 연계하여 공부하면 좀 더 빠르게 이해할 수 있을 것이다. 어디에 사용되나? 목적과 의도를 먼저 말하자면, Template Method와 비슷하다. Template Methode에서 어떤 알고리즘의 레이아웃을 정하고 자식 클래스에서 구체적인 구현을 하였다면, Factory Method는 부모 클래스에서 객체가 어떻게 생성되는지 구체적인 레이아웃을 잡고 자식클래스에서 구체적으로 구현하는 방법이다. 주로 인스턴스 생성 시퀸스가 비슷하면서 복잡한 ..
매지카복셀 (MagicaVoxel) : 간단한 복셀 3D 모델링을 위한 툴
2016. 8. 3.지금은 게임 프로그래밍을 주로 배우고 있지만, 회사에 들어가서 아티스트들과 협업하거나, 게임 디렉터가 되었을 때 혹은, 은퇴를 하고 1인 인디게임 개발자가 되었을 때를 생각해서 틈틈이 3D 모델링이나 디자인에 관심을 가지고 배우려하고 있다. 그래서 1년 전에는 학교에서 시각 디자인과의 3D Max 수업을 수강했었고, 아이디어 드로잉 책을 통해서 틈틈이 드로잉 연습도 하고 있다. (연습은하는데 너무 틈틈이라 실력이 잘 안느는건 함정 ㅠㅜ) 그 와중에 페이스북에서 간단한 복셀 3D 모델링 툴을 소개받았는데 Mac과 Windows 동시에 지원하는 툴이어서 간단히 사용해 보았다. MAGICAVOXEL은 여기서 다운로드 가능하다. 매지카복셀 (MagicaVoxel) 잠깐 사용해본 결과 굉장히 단순하면서도, 색감을..
해시 테이블 [Hash table] Part 2 : 빠르게 자료 넣고 찾자
2016. 8. 3.지난번 포스팅까지는 해시 테이블에 대한 소개와 동작 방식, 충돌 문제를 해결하는 방법으로 Close-Addressing 기법인 Chaining을 소개했다. 이번 포스팅에서는 Open-Addressing 기법에 속하는 3가지 방법을 소개하고, 지금까지 소개했던 해결법들을 간단하게 비교해 본 뒤 해시 테이블의 장단점을 정리해 보도록 하려 한다. Open-Addressing?! Open-Addressing 기법은 해시 함수로 얻어낸 주소를 그대로 이용하지 않고 상황에 따라 변경할 수 있는 기법이다. 물론 추적 가능하게 변형하는 기법을 사용한다. 이 기법을 사용하면 Close-Addressing에서는 보지 못했던 "클러스터링 문제"가 발생하게 되고 클러스터가 많이, 크게 일어나면 성능상 문제가 생기기 때문에 그..
템플릿 메소드 패턴 [Template Method] : 자식 클래스에서 구체적으로 처리하기
2016. 8. 3.책에서도 있는 내용이지만, 템플릿 메소드 패턴은 문자 모양을 따라 구멍이 뚫려있는 얇은 플라스틱판에 비유되곤 한다. 전체적인 골격을 잡아두고, 그것을 연필로 쓰면 연필로 만든 문자, 붓으로 쓰면 붓으로 만든 문자가 된다는 식의 비유다. 사실 처음에는 이런 비유가 확 와 닿지는 않았다. (사실 지금도 적절한 비유인지 잘 모르겠다.) 하여튼 템플릿 메소드 패턴은 "전체적인 메소드(알고리즘)의 흐름(레이아웃)을 부모 클래스에서 정해두고, 자식 클래스에서 자세한 내용을 구현하여 처리하는 패턴"이라고 할 수 있다. UML 개인적으로 앞에서 책에서 설명했던 비유나 말로는 이 패턴의 의도를 파악하기 조금 그랬기 때문에, 이번에는 먼저 코드를 보고 설명을 하고자 한다. (사실 다른 것도 이렇게 하는 게 맞긴 한데) 먼..
해시 테이블 [Hash table] Part 1 : 빠르게 자료 넣고 찾자
2016. 8. 3.자료구조를 배우면서 가장 감명 깊게(?) 배웠던 자료구조가 바로 해시 테이블이라는 자료구조이다. 자료를 빠르고 효율적으로 저장하는 것이 자료구조를 연구하는 가장 큰 이유일 것이다. 자료구조의 효율은 자료구조를 이용하는 대표적인 행동인 "삽입", "검색", "삭제" 등의 시간 복잡도와 공간 복잡도를 계산하고 점근적 표기법을 이용하여 나타내면 된다. (주로 Big O 표기법을 사용한다) 자세한 사항은 여기를 통해 공부하기 바란다. 간단하게 말하면 Big O 안의 식의 미지수가 무한에 가까워질 때 즉, Big O 안에 있는 식의 극한값을 이용하여 효율을 나타내고 비교하게 된다. 보통 시간 복잡도를 이용하여 비교한다. 가장 짧은 시간이 걸리는 자료구조? 지난번에 배웠던 연결 리스트나 스택 같은 자료구조는 삽입하..
어댑터 패턴 [Adapter Pattern] : 바꿔서 다시 이용하기
2016. 8. 3.어댑터는 우리가 일상생활 속에서 잘 사용하고 있는 물건중 하나이다. 예를 들어 HDMI 케이블에 MiniHDMI 어댑터를 사용하여 HDMI to MiniHDMI 처럼 사용한다든지, 110V짜리 플러그를 어댑터를 사용하여 220V에 연결하는데 사용하고 있다. 어댑터는 이처럼 "제공되고 있는 것과 필요한 것 사이를 연결해주는 역할"을 하고 있다. Adapter 패턴은 왜 사용할까?! 앞서 언급했듯이 어댑터는 제공되고 있는 것과 필요한 것 사이를 연결해주는 역할을 한다. 그러면 Adapter 패턴은 왜 사용해야 할까? 우리는 항상 처음부터 프로그래밍한다고 할 수 없다. 분명, 오픈소스 라이브러리를 사용하거나 프로젝트 중간에 합류해서 작업해야 하는 경우가 생긴다. 이럴 경우에 기존에 작업하던 코드들을 Adapt..
유전 알고리즘으로 테트리스 AI 최적화하기
2016. 8. 3.한창 신입생 때 Facebook에서 서비스하던 테트리스 게임이 유행했었다. 같은 동아리 안에서 그 테트리스를 엄청나게 잘하는 형이 있었는데 범접하기 힘든 수준…. 같은 학교 동기였던 나와 정수는 기계의 힘을 빌려서라도 그 형을 이기고 싶어서 유전 알고리즘을 이용하여 Facebook Tetris AI를 만들려 했다. 하지만 프로젝트가 끝날 즈음에 게임 등급 심의 위원회가 태클을 거는 바람에 Facebook이 테트리스 서비스를 종료하게 되면서 프로젝트가 중간에서 멈춰버리게 되었다. 게등위 때문에 프로젝트를 마감하지 못한 것에 부들부들하고 있을 때 그냥 지금까지 한 내용이라도 정리해서 동아리 문서도 만들고 내부 세미나에서 발표를 했는데, 날려버린 줄 알았던 그 자료를 발견하게 되어서 간단하게나마 포스팅을 해보..
이터레이터 패턴 [Iterator] : 순서대로 처리하자
2016. 8. 2.이라는 책을 가지고 복습하는 것이기 때문에 책에 나와 있는 패턴을 순서대로 공부해보려고 한다. 좀 멀리 떨어져 있더라도 비슷한 모양이나 역할의 패턴들이 있기는 하지만, 글 내부에 관련 패턴 형식으로 정리하면 될 것 같다. 다른 학교는 처음에 어떤 언어를 배울지는 모르겠다. 내가 알기로는 H 대학교는 파이썬을 배우고, K 대학교에서는 C를 먼저 배운다고 알고 있다. 하지만 인하대학교에서는 OOP라는 명목으로 C++를 가르치고 있고 다른 학교도 OOP라는 이름으로 Java를 가르칠 것이라고 생각한다. 그 두 개를 배워서 써본 사람이라면 를 어디서 쓰지는 않아도 들어봤을 것으로 생각한다. iterator?! C++의 그것?맞다. 여러분이 C++ 에서 사용하는 iterator다. 반복 자라 고도하는데 다음 코드..
리액트 네이티브(React Native) 시작하기
2016. 7. 29.소프트웨어 마에스트로 과정에 참여하면서 게임 외에 가장 관심이 생겼던 분야는 모바일과 머신러닝이었다. 게임은 이매진컵이나 기타 개인 프로젝트로 진행해봤었지만, 흔히 하는 안드로이드나 iOS는 만들어 본 적이 없었기 때문에 간단한 앱을 척척 만들어 내는 주위 동기들을 보면 신기할 따름이었다. (반대로 동기들이 내가 게임 만드는 걸 신기해하더라….) iOS?! Android?!아무튼, 내가 이전에 해보지 않았던 새로운 분야였기 때문에 이것저것 많이 시도해보았다. 처음에는 Swift를 이용하여 iOS를 좀 만져봤고, 다음에는 안드로이드를 살짝 만져보았지만, 자바를 좋아하는 편이 아니라 금방 싫증이 났다. 좀 더 다른 방법들을 찾아보다가 FUSE Tool을 사용해 보았는데, 안 하던 분야 + 야매학습 덕분인지 ..
스택 [Stack] : 자료를 차곡차곡 쌓아 올려라
2016. 7. 29.이번에 다룰 스택(Stack)이라는 자료구조와 다음 포스팅에서 다룰 큐(Queue)라는 자료구조는 간단하면서도 유용한 특징 덕분에 자주 활용하는 자료구조에 속한다. 스택과 큐만 잘 이해하고 활용할 수 만 있어도 다른 자료구조나 알고리즘을 배울 때 적극적으로 활용할 수 있을 것이다. 스택(Stack)이란?스택이라는 자료구조가 어떻게 이루어져 있는지는 책을 쌓아 올린 모습을 보면 편하게 이미지화할 수 있다. 차곡차곡 쌓아 올린 구조에 책이 무너지지 않게 하려면 위에서부터 차근차근 책을 제거해야 한다. (중간에 있는 책을 뽑으면 책이 무너지겠지) 스택이 이런 구조로 되어 있다. 밑에서부터 하나씩 차곡차곡 데이터를 쌓아 올리고 쌓아올린 데이터에 접근하려면 맨 위에 올려져 있는 데이터부터 꺼내 사용해야 한다. 이..
연결 리스트 [Linked List] : 자료들을 한 줄로 늘어놓는다
2016. 7. 29.앞서 말했었지만 처음 배운(과제로 나온) 자료구조들은 정말 기초적이고 간단한 형태의 자료구조들이었다. 한마디로 앞으로 구현해볼 자료구조들은 구현하기 매우 간단한 편에 속하니 부담없이 따라오다보면 구현할 수 있을 것이다. 연결 리스트(Linked List)란?우리가 해야 할 일을 쭉 적어 ToDo 리스트를 만들고, 장을 볼 때 사야 하는 물건을 쭉 적어서 쇼핑리스트를 만들어 사용하듯이 연결 리스트란, 데이터들을 쭉 나열하듯이 저장하는 자료구조를 말한다. 언뜻 보면 그럼 그냥 배열에 저장하는 것과 무엇이 다르냐고 물어볼 수 있다. 배열은 한번 선언하고 만들면 배열의 크기가 변하지 않는다. 프로그램을 만들면서 100개의 데이터가 들어올 것이라고 예상하여 100개의 배열을 만들었다고 하자. 하지만 200개의 데..