일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 8-Puzzle
- dirtyflag pattern
- trie
- two pointer
- SWEA
- Bronze
- level3
- BFS
- Unity
- solid 원칙
- Project
- algorithm
- BOJ
- 프로그래머스
- knapsack Problem
- Flyweight Pattern
- Silver
- stack
- effective C++
- Zenject
- Euclidean
- Modern C++
- level1
- 프로세스 상태
- binary search
- programmers
- LEVEL2
- Gold
- 3D RPG
- PrefixSum
- Today
- Total
목록전체 글 (168)
Patrick's Devlog

Object Pool수많은 오브젝트를 다루는 개념이며, 오브젝트의 풀을 생성하고 필요할때 꺼내서 사용하면 된다. GoF의 디자인 패턴에서는 Object Pool을 따로 설명하지 않았다. 현대에서는 많이 쓰이는 개념이 되다보니 디자인 패턴으로 취급하는 경향이 있다. 전통적인 디자인 패턴하고는 컨셉이 다를 수 있으므로, 디자인 패턴보다는 최적화 기법으로 생각하면 된다.특징"Pool"에서 준비된 상태로 대기 중인 초기화된 오브젝트 세트를 사용한다. 그리고 오브젝트가 필요할 때 새로 인스턴스화하는 대신 풀에서 오브젝트를 활성화하여 사용한다. 해당 객체의 사용이 끝나면 Destroy 대신 비활성화하고 풀에 반환한다. 객체 생성 및 삭제로 인한 가비지 급증으로 발생할 수 있는 끊김 현상(Hiccup, GC spik..

Factory Pattern객체 생성을 위한 패턴이다. 아이템을 직접 생성하는 것이 아닌, 팩토리에서 호출하여 생성하는 것이 팩토리 패턴이다. 객체 생성에 대한 인터페이스와 구현의 분리가 가능하고, 객체 생성과 관련된 많은 세부 정보를 캡슐화할 수 있다. 또한 새로운 객체를 생성 방식에 대한 확장이 가능하다. Key-Value Dictionary를 이용한 탐색을 적용해, 아이템의 등급 등을 풀로 만들어 적용하는 경우가 많다. 또한 아이템을 많이 생성하다 보니 Object Pool과 병행해서 사용된다. 아이템 생성을 위한 아이템 매니저를 제작한다고 가정하고 코드를 예시로 들어보자. public class ItemManager : MonoBehaviour { ... public void Spaw..

Command Pattern커맨 패턴은 커맨드들을 패킹해서 택배처럼 나르는 것으로 비유할 수 있다. 하나의 명령을 객체에 직접 호출하는 것이 아닌, 패킹해 쏘는 방식이다. 해당 패턴은 각각의 요청을 객체의 형태로 캡슐화해 명령을 실행하는 객체(Receiver)와 명령을 내리는 객체(Invoker)로 분리되어 있다. 이러한 특성으로 인해 단일 책임 원칙을 따르게 된다. 새로운 명령을 추가할 때마다 기존 코드를 수정할 필요없이 새로운 ConcreteCommand 클래스를 추가하면 된다. 이 특성 또한 SOLID 원칙에서 개방 폐쇠 원칙을 따른다. 커맨드 패턴은 서로 다른 요청들을 큐에 저장하거나 로그로 기록하는 등의 처리가 가능하며, 결합도를 낮추고 명령을 추상화함으로써 코드의 유연성과 재사용성을 높인다. ..

Observer Pattern관찰하는 대상이 있고, 관찰 중 이벤트 발생 시 역할을 수행하는 패턴이다. 청취자(Observer)들에게 신호를 보내는 라디오 송신탑(Subject)과 유사하다. 오브젝트의 상태가 변경되면 종속된 모든 오브젝트들에게 알림이 간다. 1:N 종속 관계를 사용해 오브젝트가 통신하되 낮은 결합도를 유지한다. Subject는 Observer를 알지 못하거나, 신호를 수신한 Observer가 무엇을 하든 관여하지 않는다. 또한 Observer는 Subject에 대해 종속 관계를 갖고있긴 하지만, 서로에 대해서는 모른다. 그래서 확장과 유지보수에 용이하다. 이는 주로 이벤트 핸들링이나 MVC 패턴에서 활용된다. Subject 추제가 존재하고, Observer들은 Subject를 주시하고..

State Pattern위의 사진은 애니메이션 상태 전이를 위한 Animator임을 이미 유니티 사용자들은 알고있을 것이다. 흔히 이를 유한 상태 머신(FSM)이라고 하는데, 상태 패턴을 기반으로 한다. State는 오브젝트의 다양한 상태를 제어한다. 주로 게임에서의 상태 패턴은 애니메이션이나 NPC에 적용된다. 유니티에서는 이러한 상태 패턴을 시스템화되어있다. 상태 패턴은 객체 내부 상태에 따라 스스로 행동을 변경하는 것이다. 상태를 클래스로 캡슐화하고, 상태 전환을 클래스 간의 참조 변경으로 처리한다. 상태 패턴의 예시는 캐릭터 애니메이션의 상태, 네트워크 연결 상태, 툴 상태 등이 존재한다. 장점상태를 캡슐화해 상태 전환 로직을 각 상태 클래스에 분리 가능 → 유연한 상태 전환상태 전환을 더 쉽게..

단일 책임 원칙(Single-Responsibility Principle)모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다. 클래스가 제공하는 모든 기능은 이 책임과 부합하다. Readability(가독성) : 짧은 클래스가 읽기 쉬움(example> 200~300 lines)Extensibility(확장성) : 작은 클래스로부터 상속이 쉬움Reusability(재사용성) : 부분에서 재사용할 수 있도록 작고 모듈식으로 설계위의 그림처럼 인스펙터 창에 있는 컴포넌트들은 모두 단일 책임 원칙을 따른다. public class Player : MonoBehaviour { [SerializeField] private string inputAxisName; [Serial..
개요언리얼 엔진 5를 공부하기 위해 인프런에서 수강 후 노션에 정리하여 정리하였다. 자세한 공부 내용은 링크를 참조하면 된다. - 학습 날짜 : 2024년 4월 15일 ~ 2024년 6월 21일후기언리얼 엔진4의 인강을 들으며 독학해봤으나, 툴의 이해도(블루 프린트 등)만 전체적으로 높였을 뿐 정확한 문법이나 코드에 대해 제대로 인지하지 못했다. 해당 강의를 통해 전체적인 언리얼 엔진의 C++ 코드를 이해력을 높였으며, 또한 언리얼 엔진만의 코딩 문법 표준 및 기준 등에 대해서도 이해하게 되었다. 해당 강의를 수강하고 추후 언리얼 엔진을 통해 개발을 진행하면 스파게티 코드가 아닌 설계에 초점을 맞춘 후 가독성이 높은 코드로 구현할 수 있을 것 같다. 해당 인강의 난이도가 초급자 수준은 아니므로, C+..
1. 누적합누적합은 앞에서부터 차례대로 누적된 합을 구하고 이를 이용해 구간 합을 구할 수 있다.2. 문제크기가 N인 정수 배열 arr가 존재할 때 다음과 같은 연산을 M번 수행해야하는 문제가 존재한다. - 구간 l, r(l l부터 r까지를 구하기 위해, 반복문을 통해 단순히 구하게 된다면 시간 복잡도는 O(NM)이 나오게 된다. 여기서, 누적합 아이디어로 변경해보자.sum[i] = arr[1] +... + arr[i], sum[0] = 0으로 정의하고, l부터 r까지의 합은 sum[r] - sum[l - 1]과 동일하다.sum[r] = arr[1] + ... + arr[r], sum[l - 1] = arr[1] + ... + arr[l-1] 으로 정의되므로, 따라서 sum[r] - sum[l - 1]은..