일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BOJ
- Flyweight Pattern
- Gold
- 프로세스 상태
- Bronze
- binary search
- Unity
- programmers
- LEVEL2
- 8-Puzzle
- stack
- solid 원칙
- trie
- dirtyflag pattern
- Euclidean
- two pointer
- 3D RPG
- level1
- Silver
- algorithm
- knapsack Problem
- SWEA
- Project
- Zenject
- 프로그래머스
- PrefixSum
- effective C++
- Modern C++
- level3
- BFS
- Today
- Total
목록전체 글 (168)
Patrick's Devlog
1. 개요https://www.acmicpc.net/problem/144991-1. 설명크기가 N X M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도 위에 주사위가 놓여져 있으며 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수다.주사위의 가장 처음에는 모든 면에 0이 적혀있고, 지도에는 각 칸의 정수가 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여있는 수가 0이면, 주사위의 바닥면에 쓰여있는 수가 칸에 복사된다. 이동한 칸이 0이 아닌 경우에는 쓰여있는 수가 주사위 바닥면으로 복사되며, 칸에 쓰여있는 수는 0이 된다. 주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때마다..

프로세스 상태프로세스는 빠르게 번갈아가면서 실행된다. 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행된다. 그리고 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다. 프로세스의 상태 표현 방식은 운영체제마다 다르나, 대표적으로는 아래의 그림과 같다.1. 생성 상태이제 메모리에 적재되어 PCB를 할당받은 상태생성 상태를 거쳐 실행할 준비가 완료되면 준비 상태가 되어 CPU의 할당을 기다리게 됨 2. 준비 상태당장 CPU를 할당받아 실행할 수 있으나, 자신의 차례가 아니므로 기다리는 상태여기서 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치라고 함 3. 실행 상태CPU를 받아 프로세스가 실행중인 상태. 할당된 일정 시간동안만 CPU 사용 가능이때, 프로세스가 할당된 시간을 모두 ..

프로세스프로세스는 쉽게 설명하면 실행 중인 프로그램이다. 보통 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하면 해당 프로그램은 프로세스가 된다. 이러한 과정을 프로세스를 생성한다고 생각하면 된다. 종류1. 포그라운드 프로세스(Foreground Process) - 사용자가 볼 수 있는 공간에서 실행되는 프로세스2. 백그라운드 프로세스(Background Process) - 사용자가 볼 수 없는 공간에서 실행되는 프로세스 - 사용자와 상호작용이 가능한 프로세스, 상호작용 하지 않고 일만 하는 프로세스(데몬, 서비스) 두 가지로 나뉨 프로세스 제어 블록(PCB, Process Control Block)모든 프로세스는 실행을 위해 CPU를 필요로 하나, CPU 자원은 한정되어 있다. 쉽게 말해 모든..

DirtyFlag PatternDirtyFlag 패턴은 메모리를 효과적으로 관리하기 위해 실시간으로 필요한 객체는 활성화하고, 필요하지 않을 때 비활성화 하는 패턴이다. 예를 들어 오픈 월드일 때 캐릭터가 이동 시 캐릭터 주변에 있는 사물 및 환경만 로딩이 되고 캐릭터가 벗어나면 로딩이 내려가는 것으로 생각하면 된다. 오픈 월드를 한번에 로딩하면 메모리 과부하가 일어나므로, 청크 개념 단위로 나눠 월드를 쪼개어 캐릭터의 시야정도까지만 로딩해야 한다. 패턴이긴 하나, 최적화 방법에 조금 더 가깝다. DirtyFlag는 비주얼적인 면, 데이터적인 면 등 여러 방면에서 광범위하게 사용한다. 구성이 복잡하고 비용이 많이드는 환경에 적합하며, 장면에서 많은 계산이나 업데이트가 발생할때 유용하다. 객체의 상태 변경..

Flyweight Pattern다른 패턴과 다르게 메모리 절약 등 성능 및 최적화에 초점을 맞춘 패턴이다. 여러 객체들이 리소스 공유를 통해 이들을 효율적으로 지원하는 패턴이다. 예를 들어 복제된 여러 GameObject가 씬에 존재할 때, 각 개별 필드는 상대적으로 작을 수 있으나 다양한 구성 요소와 저장된 데이터 필드(예 : 구조체, 배열 등 Value Type 유형)도 복사된다. 이러한 부분을 해결하기 위해 Scriptable Object를 사용하면 해결된다. 유니티에서 Flyweight Pattern을 사용한다고 하면 Scriptable Object를 사용한다고 생각하면 된다. Scriptable Object의 궁극적인 목표는 공유된 데이터는 데이터로서만 지니고 있고 여러 오브젝트가 참조한다. 이..

Strategy Pattern동일 계열의 알고리즘을 정의하고 각각의 알고리즘을 캡슐화하여 상호교환이 가능하도록 만드는 패턴이다. 쉽게 설명하면 객체 내에서 알고리즘이나 동작을 캡슐화 하고 이를 실질적으로 교환이 가능하게끔 만들어 준다는 것에 초점을 두면 된다. 각 객체는 동적으로 실행될 수 있는 고유한 동작을 캡슐화하고, 알고리즘을 사용하는 사용자와 상관없이 독립적으로 알고리즘을 다양하게 런타임시 변경할 수 있게 하는 것이다. 그림을 살펴보면 베이스 클래스인 Strategy가 존재하고, 이를 구체화해서 만든 파생 클래스가 ConcreteStrategy 클래스들이다. 실시간으로 Context에서 A나 B를 자유롭게 변경할 수 있도록 만들어준다.예시게임에서 어빌리티 시스템을 만든다고 예를 들어보자. publ..

개요MVC, MVP, MVVM 패턴은 UI와 로직의 분리가 목적인 패턴이다. 로직을 분리하여 불필요한 종속 관계를 줄인다. 오늘날의 UI는 과거보다 훨씬 정교해지고 수가 많아짐에 따라 혼자 작업할 수 없다. 여러명의 공동 작업을 진행할 때 구조를 얼마나 잘 짤 수 있을지가 관건이며, 구조의 짜임새가 중요하므로 다양한 패턴이 탄생하고 다양한 UI 프레임워크가 탄생했다. 기존의 디자인 패턴은 클래스 다이어그램으로 표현이 가능하나, 해당 패턴은 SoC(Separation Of Concerns, 관심사 분리) 측면이다. 즉, 하나 하나의 클래스가 아닌 어떤 로직 단위들의 관계를 나타내는 개념으로 생각하면 된다. 그러다보니 디자인 패턴보다는 아키텍쳐 패턴으로 분류된다. 유니티에서의 툴셋 기반으로 진행되는 도구는 ..

Singleton Pattern유일무이한 존재의 인스턴스, 즉 하나의 프로젝트에서 하나의 객체만 존재하는 것이다. 보통은 클래스를 생성할 때 인스턴스화한 후 여러 개 생성이 가능하나, 클래스가 자신의 인스턴스 하나만 인스턴스화할 수 있도록 보장하는 것이 싱글톤 패턴이다. 여러 곳에서 불러와야 하므로 해당 단일 인스턴스에 대한 손쉬운 전역 액세스를 제공하고 하나의 객체만 존재할 필요가 있을 때 사용된다. (example> 상태창, 게임 매니저, 오디오 매니저, 파일 관리자 UI Setting etc)그러나 모든 곳에서 접근해야 하다보니 안티 패턴(비효율적이거나 비생산적인 패턴)으로 취급되기도 하며, 커플링이 발생하기 쉬운구조이다. 생성 시점이 명확하지 않다보니 테스트나 디버깅이 불편하다는 점이다. 싱글톤 ..