목록전체 글 (162)
Coding Memo
Observer 패턴은 Observable 패턴으로 불리기도 한다. Observer 패턴은 개체 간 1:N 종속성을 설정할 때 사용되는 동작(행태) 디자인 패턴이다. Subject의 상태가 변경되면 이 Subject에 등록되어 있는 Observer들에게 통지를 해주어 Observer에서 각각의 처리를 할 수 있도록 알려준다. 개제 간에 느슨한 결합을 형성하며, 몇몇 언어들을 자체적으로 간접적 제공(인터페이스 및 클래스)하는 경우도 있다. 예시 C# System - IObservable, IObserver Java java.util.Observable, java.util.Observer Note: 관찰자 패턴은 UI를 업데이트하는데에도 이용할 수 있다. 특정 값이 변경되었을 때, 변화를 감지하고 UI를 자..
싱글턴 패턴 싱글턴 패턴은 자주 이용되는 디자인 패턴 중 하나이다. 간단하게 정의하자면, 어떤 특정 컴포넌트의 인스턴스가 애플리케이션 전체에 단 하나만 존재해야 하는 상황에서 사용하는 디자인 패턴이다. 싱글턴으로 디자인된 클래스에 인스턴스를 요청하면, 인스턴스를 반환하는 방식이다. 직접 new()를 사용해 인스턴스를 생성하지 않는다는 것을 기억하자. 구현 위 내용을 코드로 구현한다면 (C#, Java) class Singleton { private static Singleton _instance; public static Singleton Instance { get { if (_instance == null) { _instance = new(); return _instance; } return _inst..
OSI OSI는 Open System Interconnection으로 통신 시스템의 기능들을 7개의 계층(layer)로 표준화하는 개념적인 프레임워크이다. 1970년대 말, 1980년대 초에 ISO에서 서로 다른 컴퓨터 시스템과 네트워크 장치 간의 상호작용을 위해 개발되었다. OSI의 7개 계층은 아래와 같다. 이게 가장 초기의 표준이긴 하지만 활용성은 그리 좋지 않았다. 따라서 OSI 모델을 전부 가져오지는 않았지만 일부를 가져와 사용하는 TCP/IP 모델이 있다. TCP/IP Transmission Control Protocol / Internet Protocol로, 현대 인터넷 기반을 형성하는 가장 실용적인 네트워크 프로토콜 프레임워크이다. 현재 가장 많이 사용되고 있으며, 사실상 TCP/IP가 표..
각 용어의 정의를 간단히 설명 하자면... (요약) Atomic: 말그대로 원자성이란 뜻으로 Atomic 명령 실행 중에는 다른 어떤 간섭 없이 끝까지 실행됨을 보장 Lock: Multi-Thread 환경에서 여러 쓰레드가 공유하는 어떤 리소스(변수 등)에 접근하는 방법에 대한 메커니즘 Critical Section: Multi-Thread 환경에서 상호 배제를 보장하는 특정 구역(section) 공유 리소스 접근 컨트롤이 필요한 이유 아래 코드를 살펴보자. int n = 0; void Thread1() { for (int i = 0; i < 100000; i++) { n++; } } void Thread2() { for (int i = 0; i < 100000; i++) { n--; } } int ma..
Unity에서 GameObject에 Component(MonoBehaviour)를 추가 하면 ‘Inspector’에 관련 내용이 표시가 된다. 위 이미지에서는 Transform과 SpriteRenderer가 Component로 붙어있고, 각 컴포넌트에 에디터에서 직접 편집하고 수정할 수 있는 값들이 나타나 있다. 이 값들은 흔히 우리가 MonoBehaviour에서 [SerializeField]태그가 붙거나 public으로 선언한 필드가 있으면 자동으로 Inspector에 나타나게 된다. 이 값들을 (태그에서 알 수 있듯이) SerializedProperty라고 하고 이것을 가지고 있는 객체를 SerializedObject라고 한다. 말 그대로 직렬화 되어서 우리가 유니티 에디터에서 다루기 쉽도록 바꾼 것..
Canvas 아래 몇백개의 오브젝트가 있을 경우 렉이 걸릴 위험이 크다! (당연하지만) UI의 transform 변경, UI에 대한 animation 적용, hierachy에 추가 및 수정 등의 레이아웃이 변동되는 Dynamic UI Component에 대해서는 Canvas를 따로 분리하는 것이 성능 향상에 도움이 된다. Canvas에서 UI 요소가 추가/삭제되거나 transform에 변경이 일어날 때, Canvas에 있는 모든 UI 요소에 대해 재배치가 일어나게 된다. 즉, Canvas에 많은 UI 요소가 있을 경우 모두 재배치가 빈번하게 일어날 수 있고 이는 성능 저하를 유발할 수 있다. 이에 대해 Canvas를 따로 분리하는 방법이 있다. 따라서 다음과 같은 경우에 Canvas를 분리하여 사용하자...
Summary SetMinThreads로 Worker Thread의 최소 수를 지정할 때는 SetMaxThreads로 최대 수도 함께 지정해주어야 한다. (그 역도 마찬가지이다.) 그렇지 않으면 System의 default 값이 적용된다. 코드를 테스트하다가 우연히 알게 되었다. SetMaxThreads로 worker 쓰레드 수를 한정하고 초과 개수의 쓰레드를 돌려도 잘 돌아가는 현상을 보고 ‘뭐지…’ 하고 한참을 찾아보고 테스트 해보다가 해결했다. using System; using System.Threading; namespace Test { class Program { static void Main(string[] args) { ThreadPool.SetMinThreads(1, 1); ThreadP..
Summary 자료형에 따라 call by reference 인지, call by value인지 결정되는데, 직접 전달 방식을 정할 수도 있다. call by value: 값을 복사하여 사용 call by reference: 값을 참조하여 사용 Value Type: 기본 자료형 (int, float, char), struct, … Reference Type: Class (string …), Action, … Variable Data Type Call By 매개변수에서 참조하는 개체 상태 수정 - 호출자 표시 여부 매개 변수에 다른 객체를 참조하여 할당 - 호출자 표시 여부 Value value X X reference (ref) O X Reference value O X reference (ref) O ..