본문 바로가기

전체 글

(27)
디자인 패턴(싱글톤 패턴, 팩토리 패턴) 싱글턴 패턴(Singleton Pattern)특정 클래스의 인스턴스가 오직 하나임을 보장하고 이 인스턴스에 대한 전역 접근 방법을 제공 자주 호출되는 객체를 new로 매번 새로 만드는 것보다 싱글톤으로 만들어 전역 접근이 가능하게 해 접근하면 메모리를 절약할 수 있다. GameManager 같이 게임을 전체적으로 관리하는 스크립트를 싱글톤으로 만들면 편리하다. 하지만 단점도 존재하는데 클래스들 사이의 의존성이 높아져 싱글턴 인스턴스가 수정되면 참조하는 다른 클래스들도 수정해야 할 수도 있다. 때문에 유지보수가 힘들어 질수도 있다. 간단하게 싱글톤 패턴을 구현해봤다.이렇게 다른 클래스에서 참조할 수 있다.  팩토리 패턴(Factory Pattern)팩토리 패턴은 심플 팩토리 패턴, 팩토리 메소드 패턴, 추..
코루틴(Coroutine) 유니티에서 코루틴을 사용하면 다수의 작업을 분산시킬 수 있다.https://docs.unity3d.com/kr/2022.3/Manual/Coroutines.html 코루틴 - Unity 매뉴얼코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니docs.unity3d.com코루틴을 사용하면 비동기 작업을 처리 할 수 있다. 때문에 함수를 멈췄다가 유니티에게 제어권을 반환하지만 다음 프레임이나 특정 프레임에 함수를 다시 실행시킬 수 있다. 코루틴을 사용해 딜레이를 구현할 수 있다.※비동기 - 코드가 끝날때 까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 것 ..
Object Pooling 전에 학교에서 최적화 방법으로 총알 등을 구현할때 오브젝트 풀링 디자인패턴을 배워서 구현해서 사용해 본적이 있다. 하지만 후에 유니티에서 오브젝트 풀링을 제공한다는 것을 알고 그 방법으로 구현을 해볼려고 한다. 우선 풀매니저를 만들고 오브젝트가 어떤 풀에 들어가는지 알고 있어야 한다.ObjectPool()에 들어가는것은 (생성함수, Get이 될때 실행함수, Release될때 실행함수, Destroy될때 실행함수, maxSize - 최종적으로 풀에 몇개를 저장할것인지)Get이 실행될때 element가 parameter가 되고 Release가 실행될때 element가 실행한다. 다음은 오브젝트를 만들고 화면에 나가면 Release되게 만든다. 오브젝트가 화면에 나가면 꺼지고 다시 생성시 켜지는 것을 볼 수 ..
Stack과 Heap 스택과 힙에는 메모리들이 저장된다. 각각 저장되는 메모리들이 다르다. 스택에는 지역변수, 함수의 매개 변수 등이 저장되고 함수의 호출때 할당되고 호출이 종료되면 소멸한다.스택은 후입선출(LIFO)의 입출력 형태를 가지고 있는 자료구조다. 크기가 컴파일타임에 정해진다. ※ 컴파일타임(Compiletime), 런타임(Runtime)컴파일타임: 개발자가 작성한 코드를 컴파일(개발자의 코드를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정)을 통해 프로그램이 실행가능하게 되는 과정런타임: 컴파일을 마친 프로그램이 사용자에 의해 실행되어 동작할 때 힙에는 동적할당 메모리가 저장된다. C++에서 new로 할당하면 힙영역에 할당되는 것이다. 하지만 C#에서는 Garbage Collection이 있어 자동으로 메모리가 ..
Garbage Collection, GC Garbage Callection이란 자동으로 메모리를 관리를 해준다.https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals 가비지 컬렉션 기본 사항 - .NET가비지 수집기의 작동 원리와 최적 성능으로 구성하는 방법에 대해 알아봅니다.learn.microsoft.com그렇기 때문에 개발자가 수동으로 메모리를 관리해주지 않아도 된다. 유니티에서도 GC로 자동으로 메모리를 회수한다. 힙 영역에 메모리가 부족하면 유니티에서 GC를 실행시켜 사용하지 않는 오브젝트를 삭제해 메모리를 확보한다. https://docs.unity3d.com/kr/2021.3/Manual/performance-garbage-collector...
포인터 https://learn.microsoft.com/ko-kr/cpp/cpp/pointers-cpp?view=msvc-170 포인터(C++)Microsoft C++의 원시 포인터 및 스마트 포인터 정보입니다.learn.microsoft.com포인터는 개체의 메모리 주소를 저장하는 변수이다.변수 같이 어떤 데이터를 저장하기 위해 메모리에서 저장할 공간을 할당받는다. 이때 데이터가 저장된 메모리 시작주소를 주소 값이라고 한다.  * 참조연산자를 붙여 포인터 변수를 선언한다. 포인터에 저장된 주소에 저장되어 있는 값을 반환한다.& 주소연산자는 해당 변수의 주소값을 반환한다.  ptr 포인터 변수를 변수 a의 주소값으로 초기화해서 출력해보면 ptr은 a를 참조하기 때문에 3이 출력된다. 참조연산자 없이 그냥 출력..
Class 아이템들 사용에 필요한 변수들을 미리 Item클래스에 만들어 상속 받을 수 있게끔 구현했다.  아이템 사용 스크립트, 코루틴에 사용하는 WaitForSeconds를 매번 new로 힙에 할당하면 가비지가 생기므로 이 부분을 최소화 하기 위해서 아이템을 사용할때 딜레이를 주기 위해 사용될 WaitForSeconds를 미리 클래스에서 선언했다.이러면 한번만 선언해 사용하기 때문에 비교적 최적화에 도움이 될거 같다고 생각했다.각 아이템들 정보를 담는 스크립트, 공통으로 사용할 변수들을 클래스에 미리 선언해 상속받았다.
Interface 인터페이스를 사용하여 아이템들의 공통된 기능을 구현하고 한꺼번에 관리를 해보려고 한다. 참고- 인터페이스 속성 - C# 프로그래밍 가이드 - C# | Microsoft Learn 인터페이스 속성 - C# 프로그래밍 가이드 - C# C#의 인터페이스에 속성을 선언할 수 있습니다. 이 예제에서는 인터페이스 속성 접근자를 선언합니다. learn.microsoft.com 인터페이스를 선언하여 아이템의 종류를 구분할 indexNum, value, 아이템 획득시 구현할 함수 GetItem, 아이템 획득시 아이템 갯수를 증가시킬 ItemCharge함수를 선언했다. IItem을 상속받은 Coin아이템 스크립트다. 안에서 다시 변수랑 함수를 선언하여 만들었다. Player.cs의 OnTriggerEnter함수다. 충돌된..