비동기 프로그래밍에 대해서 지난글에서 개념적으로 다뤄봤으나, 아직 어떻게 써야할진 애매하다. 유니티에서 예제와 함께 비동기에 대해 더 이해해보려고 한다. 예제로 아침식사를 만든다고 가정해보자. 아침으로 베이컨을 굽고 커피를 따르고 등 먹을게 많다. 할게 많으니 비동기로 아침을 차려서 효율적으로 일처리를 해보자. -예제를 위한 빈 클래스들 -아침 식사를 위한 메소드들 -비동기를 실행 바로 var eggsTask = await FryEggsAsync();해도 되지만, 이 예제를 만든 사람은 실행부분과 끝나는 시점을 구분하기 위해서 나누기 위해서 위와 같이 짠거라 생각한다.(개인 적인 추측) await로 테스트가 끝난 시점을 체크 끝났으면 다음으로 넘어간다. -이렇게 태스크가 여러개일때, 태스크를 리스트로 담..
비동기 프로그래밍이란? CPU를 더욱 효율적으로 사용하기 위한 기술이다. 중앙처리장치는 많은 작업을 요청받고 처리한다. 네트워크 통신을 주고 받거나, 데이터를 읽고 쓰는 등 많은 작업을 매초마다 처리하게 되는데, 이를 현재 입출력 작업이 완료되길 기다리게 하는것은 비효율적이다. 이를 해결하기 위해 비동기 프로그래밍을 사용하며, 입출력을 기다리는 대신, 다른 업무를 처리하게 하며 입출력 작업이 완료되었다는 메세지를 받은뒤 기존 작업을 이어나가는 프로그래밍이다. 그러니, 우리가 비동기 프로그래밍을 사용할때, 쉽게 말해 오래 걸릴것 같은 함수들에 대해서는 비동기로 돌리자는 것이다. 오래 실행되는 함수를 그냥 동기적으로 작성하고, 필요하면 새 스레드나 작업 객체에서 그런 함수를 호출함으로써 동시성을 도입하는 전..
프로그래밍에는 두가지의 변수 타입이 있다. 값 타입, 참조 타입 -값타입이란? 스택영역에 저장되며, Object를 상속 받는 구조체이다. Object -> ValueType -> (값에 따라 다른 구조) 예)int32 데이터에 직접 값이 저장된다. -참조타입이란? 힙에 저장되고, Object를 상속받고, 해당데이터의 참조 값이 저장된다. 처음 변수를 선언하면 값타입과 달리 메모리를 생성하지 않는다. 값타입을 참조타입 처럼 감싸주는것을 박싱이라고 한다. 스택에 있는 데이터를 힙으로 복사 해오는데, 이과정에서 리소스를 많이 잡아먹는다. int i = 1; object x = i; 이런식.. 이에반해, 언박싱은 박싱과 완전히 반대개념이다. 힙에 있던데이터를 스택으로 복사해오는과정이다. 주의) 선언할 때 is ..
델리게이트란? 함수 대행자이다. 어떤 함수들을 델리게이트에 추가 해놓는다면, 그함수들을 실행시켜준다. 델리게이트 선언 -> 델리게이트 추가+=들어갈 함수 -> 델리게이트 실행 이런한 델리게이트로 클래스간의 커플링을 방지 할수 있다 이벤트 사용하지 않는 경우 A라는 함수를 실행시키면 B 함수를 실행 시킬려고 한다. 그렇다면, A를 가지고 있는 클래스는 B에 대해 알고 있어야한다. 즉, A의 클래스에 public X x;으로 선언후, x.B(필요한 매개변수)식으로 사용해야한다. 이벤트를 사용하면 이런 경우를 피할수 있다. 이벤트를 사용 선언 public delegate void [델리게이트 이름](메소드에 들어갈 매개변수) public event [델리게이트][이벤트 이름] 메소드 추가 [이벤트이름](pub..
ObjectPooling이란? 게임에 필요한 오브젝트를 미리 생성해서 필요할때마다 꺼내서 쓰고 사용이 끝나면, 다시 돌려놓는 개념이다. 필요할때마다, 오브젝트를 생성, 파괴를 하는 것이 아닌, 필요한만큼을 미리 만들어 두고 모자라면 추가 생성을 해주고, 게임이 끝나면 파괴를 해준다. 이로써, 생성 파괴 횟수를 줄일수있다. 언제 쓰이나? 주로, 총알이나 먼지 이펙트 같은곳에서 많이 쓰인다. 객체를 빈번하게 생성/삭제 해야할때, 객체들의 크기가 비슷할 때 객체를 힙에 생성하기엔 느리거나 메모리 단편화가 우려될 때 DB 연결이나 네트워크 연결같이 객체 생성시 비용이 비쌀 경우 미리 생성해두고 재사용할 필요가 있을 때 (메모리 단편화? RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히..
싱글턴 패턴이란? 어떤 클래스가 한번만 메모리를 할당(Static)하고, 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 즉, 메모리에 단하나의 인스턴스를 할당한 후에 그 인스턴스를 계속 참조하여 사용하는 것. 생성자가 여러차례 호출이 되더라도 생성된 객체 하나만 호출이 된다. 싱글톤 패턴을 쓰는 이유 메모리 낭비를 방지할 수 있음 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용 DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용. (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 ..
프로젝트를 하다 보면 버전 관리는 필수적인 덕목이다. 개인적으로 프로젝트를 진행하며 버전 관리에 대한 중요성을 뒤늦게 나마 깨달아 git에 대해 공부를 하기 위해 코드잇 강의를 보며 강의노트를 만들었다. git란? > 버전관리 프로그램이다. - 파일의 변화를 시간에 따라 정리하고, 특정 시간대의 파일을 가져오는 시스템이다. > 여러 개발자와 협업을 할수 있게 해준다. > 다른 컴퓨터에 작업물을 보낼수 있다. => 백업기능 -> 외부컴퓨터를 제공해주는데, 거기에다 버전관리를 할 프로젝트를 올려두는 데 이것이 GitHub이다. 장점 1) 지난 과정의 확인 가능 2) 이전 버전으로 돌아갈수 있음 repository & commit > 프로젝트를 만들 때 필요한 프로그램들을 담을 디렉토리가 필요하다. 이를 깃으..