분류 전체보기 39

UNITY의 DOTS

DOTS란 무엇인가? Data Oriented Technology Stack의 약자로 데이터 지향 기술 스택을 의미한다. 이 DOTS는 데이터 지향 방식을 채택하여 고성능 멀티 스레딩과 CPU를 효율적으로 사용할 수 있게 하는 기술이다. 그렇다면 이 데이터지향은 무엇을 의미할까? 데이터를 어떻게 사용할 것인지를 중심에 놓는 방식으로, 데이터를 메모리에 어떻게 배치할지를 고민한 방식이다. 이러한 고민이 나오게 된 원인은 CPU의 성능이 메모리의 성능보다 더 뛰어나기 때문인데, 메모리에서 데이터를 가져오는 시간보다 CPU가 처리하는 속도가 아득히 빨라지면서 CPU를 제대로 활용하지 못하는 문제가 발생했기 때문이다. 그렇기에 데이터지향디자인은 객체를 구성하는 데이터들을 동일한 것끼리 묶어서 관리하는 디자인으로..

Unity 2024.02.14

API, 프레임워크, 라이브러리

프레임워크 라이브러리 API 이 세가지를 가지고 차이점을 물어보는 경우가 많음 API : 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 어플리케이션 프로그래밍 인터페이스 인터페이스는 우리가 상호작용할 때 사용했듯 마찬가지 EX ) 손님 - 과일가게 여기서 - 가 API USER - 카카오톡 API - 카카오톡 프레임워크와 라이브러리는 클래스 뭉치 프레임워크 : EX) 차를 만들기 위한 뼈대, 뼈대에 대한 이해가 없더라도 만들 수 있도록 해주는 것 정의 : 응용프로그램 및 소프트웨어 개발을 수월하게 하기위해 제공된 개발환경 프레임워크는 종속성을 우리에게 줌 라이브러리 : EX) 컴포넌트화 된 모듈, 즉 뼈대가 아닌 그 뼈대를 만들기 위한 모..

CS 2024.01.25

리플렉션과 어트리뷰트

리플렉션이란? 클래스의 메타데이터(변수, 함수, 프로퍼티 등)을 런타임에서 가져와 사용할 수 있는 기능이다. 리플렉션은 탐색 과정을 거치기 때문에 연산이 많이 들기 때문에 이 점을 유의하며 사용해야 한다. 어트리뷰트란? 속성을 부여하는 것으로 자주사용되는 [SerializeField] 어트리뷰트 또한 직렬화라는 속성을 어트리뷰트가 붙여진 변수에 부여하는 것이다. 예시 코드 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Reflection; using System; // 객체 : 속성과 기능을 가진 것, 멤버는 속성과 기능 전부를 뜻함 public class Monster { public ..

C# 2024.01.02

가비지 컬렉터

C#은 C++과 달리 매니지드 힙이라는 개념이 도입, 즉 자동으로 힙영역의 메모리를 관리. 이를 가비지컬렉터가 관리해줌 매니지드 힙 : 메모리를 자동으로 관리해주는 힙 가비지컬렉터 (GC) 참조되지않는 메모리를 수집해서 해제해줌 가비지컬렉터가 나온 배경 1. 메모리누수 문제(Memory Leak) 2. 이중 해제 : 이미해제가 된 포인터(댕글링(Dangling Pointer) 포인터)를 해제하는 것 3. 이른 해제 : 사용이 끝나지 않았는데도(참조가 되는중) 해제하는 것 => 스마트포인터도 이를 해결하기 위해 나온 것이지만 직접 사용해야함. 매니지드힙은 순차적으로 메모리가 쌓이는 구조. 특정조건에 루트를 돌면서 참조가 되고 있는지 확인 후 참조가 되고 있지 않는 놈들을 모아서 가비지컬렉터가 해제. 외부단..

CS 2023.12.06

IComparable 인터페이스 상속을 통한 클래스 정렬

IComparable란? IComparable이라는 인터페이스는 정렬에 대한 순서 기능을 제공하는 인터페이스다. 따라서 이 IComparable을 상속받은 클래스는 클라이언트가 원하는 대로 Sort정렬시 정렬되는 순서를 정해줄 수 있다. 예를 들면 몬스터라는 클래스가 어그로수치를 가지고 있을 때 이 어그로 수치를 기준으로 정렬을 시켜줄 수 있다는 것이다. 예시 코드 public class Monster : IComparable { public int agroCost; public Monster(int agroCost) { this.agroCost = agroCost; } public int CompareTo(Monster other) { if (agroCost > other.agroCost) { retu..

C# 2023.11.30

반복자패턴

반복자패턴이란? 일련의 데이터 집합에서 순차적인 접근을 제공해주는 패턴이다. IEnumerator를 상속받은 순서에 대한 클래스를 만들어주고 그 순서로 컬렉션을 반복할 수 있게 해주는 것이다. 예시로 카드덱 클래스가 있을 때 카드덱에 대한 순서의 의미를 가진 클래스를 구현하고, 그 순서를 받아 커스텀한 순차대로 카드를 출력하는 것이다. 예시코드 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class Card { public string name; public int cost; public Card(string name, int cost) { this.name = name;..

디자인패턴 2023.11.23

상태패턴

상태패턴이란? 상태패턴은 한 객체가 여러 개의 상태를 가질 때 사용하는 패턴이다. 예를 들어 몬스터가 탐지, 추격, 공격이라는 상태를 가진다고 했을 때 탐지 상태 중 적 발견 시 추격으로 전환, 추격 후 공격범위 안에 들어올 시 공격 상태로 전환 등 특정 조건에 따라 상태가 변경되고 그 객체는 하나의 상태만을 가지고 있을 때 사용된다. 예시코드 using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public interface IStateMachine { void SetState(string name); object GetOwner(); } ..

디자인패턴 2023.11.13

옵저버패턴

옵저버패턴이란? 1대 다수의 관계를 갖는 패턴으로, 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 라고 위키에 쓰여 있다. 즉 간단하게 말해서 1대 다수의 관계의 1의 상태변화를 등록된 모든 관찰자들에게 알리는 것이다. 예를 들어 일시정지 매니저와 일시정지에 적용될 객체들이 있다고 했을 때, 일시정지 매니저의 상태가 일시정지상태라면 이를 관찰하고 있는 모든 객체들 또한 일시정지라는 상황을 감지하고 그 기능을 수행하는 것이다. 사용 예시 코드 using UnityEngine; using System; public interface IPauseable // 일시정지 인..

디자인패턴 2023.11.10

델리게이트와 event

델리게이트란? 델리게이트는 특정 매개변수 목록 및 반환 형식이 있는 함수에 대한 참조를 뜻한다. 이말을 간단하게 풀면 함수를 대신 호출해주는 기능으로, 자신이 어떠한 기능을 하는지 명확하게 알고있다. 델리게이트 정의하는 법. 하지만 위처럼 void반환타입의 함수를 담는 델리게이트는 너무나도 자주사용될것이 자명하다. 그래서 선배개발자분들은 이러한 델리게이트를 미리 만들어두셨다. 그것이 바로 Action. 마찬가지로 반환값과 매개변수를 갖는 함수를 참조하는 델리게이트 또한 미리 만들어두셨다. 그것이 바로 Func. 무명메소드란? 이름이 없는 메소드란 뜻으로 재사용 될일이 없을 기능들은 무명메소드로 델리게이트에 엮어주는 것이 편하다. 사용 예시 코드 event 키워드란? 델리게이트엔 event라는 키워드를 붙..

C# 2023.11.08