분류 전체보기 (15) 썸네일형 리스트형 언어별 연산 성능에 대하여 개발자라면 한 번쯤 이런 말들을 들어보았을 것이다. 스크립트 언어는 느리다. 매니지드 언어(C++)가 언매니지드 언어(Java) 보다 빠르다. 나눗셈(/), 실수, 문자열 연산은 느리다. 필자의 경우 이전에 게임 서버를 처음 개발할 때 난수 생성과 확률의 계산을 실수 값으로 했다가 정수 값으로 전부 고쳐야 했던 경험이 있다. 과연 얼마나 차이가 나길래 저런 말들을 하는 건지 궁금해져서 간단하게 테스트해보기로 했다. 테스트한 언어는 다음과 같다. C++ C# Java Python NodeJS 방식은 간단하다. 숫자 연산은 10,000,000 번씩 100회의 평균 시간 문자열 연산은 100,000 번씩 100회의 평균 시간 위 표에서 + H 는 '값 = 값 + 2' 로 연산 (하드코딩), + V 는 '값 =.. Asset Bundle 사용해보기 유니티 공식 메뉴얼 에 있는 에셋 번들에 대한 설명 사진이다. 리소스를 에셋 번들이라는 이름으로 묶어서 외부로 뺄 수 있는 기능으로 특히나 모바일 게임에서 apk 자체의 용량을 줄이기 위해 매우 유용하게 사용된다. 데스크탑의 경우에도 예외는 아니며 버그 조금 수정했다고 전체 게임을 다시 받게 할 수는 없는 노릇이기에 이미지, 사운드, 모델 등으로 분류를 해서 번들로 관리를 한다면 필요한 리소스들만 버전 체크로 업데이트해서 유저, 개발자 서로 편할 수 있다. 또한 DownLoadable Content 와 같은 기능을 구현할 때도 매우 유용하게 사용할 수 있다. 이제 이 좋은 기능을 한번 사용해보자. 우선 에셋 번들을 에셋에 설정하는 법은 간단하다. 옆 사진과 같이 인스펙터 하단의 AssetBundle 에서.. Docker 및 Kubernetes 설치 swap 메모리 비활성화 swapoff -a $ swapoff -a 혹은 /etc/fstab에서 swapfile 라인 주석 처리. $ sed -i '2s/^/#/' /etc/fstab $ sudo sed -i '/ swap / s/^/#/' /etc/fstab /etc/fstab 파일의 2번째 라인에 #을 붙이라는 명령어다. 잘못할 시 매우 위험하니 /etc/fstab을 확인 후 하거나 직접 vim이나 vi로 수정하는 것을 더욱 권장한다. + 아래의 명령어를 사용해도 될 것이다. Docker 설치 먼저 패키지 관리 도구를 업데이트한다. $ sudo apt update 이전 버전의 도커를 삭제한다. $ sudo apt remove docker docker-engine docker.io containerd .. 9. MVC 패턴 (Model-View-Controller Pattern) 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. - 위키백과 - 이번에 알아볼 건 MVC 패턴이다. 이 패턴은 흔히 User Interface (통칭, UI 또는 사용자 인터페이스) 를 사용하는 프로그램에서 거의 필히 적용될만큼 매우 유용한 패턴이다. MVC 라는 이름에서 볼 수 있듯 3가지로 구조가 분리되는데 이는 다음과 같다. 위 그림의 설명과 같이 이 패턴의 Model 에는 옵저버 패턴 (Observer Pattern) 을 사용한다. 이는 객체의 상태를 관찰하는 패턴으로 위 그림만으로 이해가 어렵다면 미리 보고 오는 것이 좋다. 이제 아래 코드를 통해 간단히 살펴보도록.. 8. 컴포지트 패턴 (Composite Pattern) 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. - 위키백과 - 이번에 알아볼 건 컴포지트 패턴이다. 이 패턴은 객체를 트리구조로 구성하여 하나의 거대한 객체를 구성할 수 있고 각각의 하위 객체도 모두 접근하여 제어가 가능해서 자유롭다. 이 패턴을 사용하는 대표적인 예로 유니티를 꼽을 수 있다. 상위 오브젝트인 몸통이 정의에서 말한 전체 계층에 속하고 팔이나 손은 부분 계층에 속한다고 볼 수 있다. 각각의 모듈화된 기능(Transform, Rigidbody 2D, Sprite Renderer 등)들을 해당 오브젝트에 추가하여 기능을 간단하게 추가할 수 있다. 어떻게 보면 데코레이터 패턴 (Decorator patte.. 7. 빌더 패턴 (Builder Pattern) 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 - 위키백과 - 이번에 알아볼 건 빌더 패턴이다. 먼저 객체의 생성 과정과 표현 방법을 분리한다는 정의를 생각해보자. 여기서 표현 방법이라는 말이 쉽게 이해가 되지 않는다면 세부 설정이라고 생각하면 된다. 이를 분리한다는 건 가장 기본이 되는 것만 생성 시 초기화해주고 나머지 세부 설정들은 변화를 줄 수 있는 형태로 구현한다는 것이다. 아래 코드를 한번 살펴보자. public enum CharacterClassType { NONE, ASSAULT, ATTACKER, SUPPORTER } public abstract class CharacterSkill { public string Name;.. 시간 제어에 대한 간단한 테스트 최근 스팀에서 청강문화사업대학교의 졸업 작품인 여명이라는 게임을 알게 되었다. 주인공이 시간을 조종해서 회피기나 시간 역행, 일정 범위 시간을 멈추는 기술을 사용하는 TPS 게임으로 대학생들이 직접 더빙까지 하여 꽤나 좋은 퀄리티를 보여준다. 아무튼 이 게임은 유니티로 개발되었는데 유니티에는 각 객체의 시간을 별도로 제어하는 기능이 없다. 시간에 관련된 건 Time 클래스에 있는데 timeScale 값을 변경하게 되면 게임의 전체적인 속도에 영향이 가므로 특정 객체를 제어하기엔 부적절하다. 이전에 붕괴3 에서도 비슷한 걸 본 기억이 있는데 (아마도) 생각난 김에 간단하게 한번 구현해보려 한다. public abstract class AreaTimeMonoBehaviour : MonoBehaviour { .. 6. 옵저버 패턴 (Observer Pattern) 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. - 위키백과 - 이번에 알아볼건 옵저버 패턴이다. 쉽게 말하면 유튜브 구독과 유사하다고 볼 수 있다. 유튜버가 관찰할 객체가 되고, 이를 구독한 시청자가 관찰자가 되는것이다. 새로운 영상이나 커뮤니티 글을 올리게 되면 구독자들에게 알림이 가는 것이 옵저버 패턴이다. (실제로는 알람 설정까지 해야 하지만) 아래 코드를 통해 형태를 알아보자. public delegate void VideoHandler(string url); public class Youtuber { public event VideoHandler Subsc.. 이전 1 2 다음