c# 107

[CS : 디자인패턴] 플라이웨이트(Flyweight)

메모리와 직접적으로 연관이 있는 플라이웨이트 패턴. 팀원들과 디자인패턴 스터디를 시작하면서, 우선적으로 게임에 주로 활용되는 패턴을 찾아보았다. 그리고 현재 진행 중인 프로젝트 에 활용할만한 디자인패턴을 찾았다. 본인은 프로젝트에서 디자인과 리소스 관련 역할이 다른 팀원들에 비해 큰 편이라고 생각하였으며, 플라이웨이트를 잘 활용한다면 프로젝트의 메모리를 잘 관리할 수 있을 것이라 생각하였다. 특히, 레퍼런스게임 중 하나인 를 직접 플레이하며 가장 놀랐던 점이 다른 방치형 게임들에 비하여 발열이 거의 없다!라는 점이었다. 방치형 게임을 하다 보면 밤에 깜빡하고 켜두고 잠들 때가 종종 있는데, 다른 게임들은 폭발하는 거 아닌가 싶을 정도로 발열이 굉장히 심했던 기억이 있다. 하지만 프로즌시티는 살짝 따뜻한 ..

[CS : 디자인패턴] 싱글톤(Singleton)

디자인패턴에서 생성패턴의 하나인 싱글톤. 수업에서 계속 다뤄 구조와 의미는 알지만, 스스로 싱글톤이 뭐야?라고 했을 때 쉽게 대답하기 어려웠다. 다른 디자인패턴을 공부하기 전에 개념적으로 확실히 하고 싶어 다시 공부하며 복습하였다. 싱글톤(Singleton) 한 클래스가 한 개의 인스턴스만 갖도록 제한. 프로그램 시작부터 종료까지 동일한 인스턴스로 반환되어 전역 범위에서 접근 가능하게 하는 패턴이다. 중앙에서 관리 혹은 정보 공유가 필요할 때 주로 쓰인다. 장점 하나의 인스턴스를 공유하며 사용하기 때문에 생성 비용이 줄어듦 단점 의존성이 높아짐 - 독립적인 테스트가 어려워짐 의존성 주입 결합을 느슨하게 만들어줌 장점 모듈들을 쉽게 교체 가능한 구조가 되어 테스트가 쉬워짐 의존성 방향이 일관됨 쉽게 추론 ..

[알고리즘] 재귀함수

재귀함수의 대표적인 예 팩토리얼과 피보나치수열로 재귀함수를 연습하였다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace reflexive { class Program { static void Main() { int input = 5; int factorial = Factorial(input); Console.WriteLine("{0}! = {1}", input, factorial); int fibpnacci = FibonacciN(input); Console.WriteLine("{0}번째 항 : {1}", input, fibpna..

[자료구조] 그래프 BFS(너비우선탐색)

그래프의 탐색 -길이우선탐색(DFS) : 자식까지 탐색 후 다른 형제 노드를 탐색 -너비우선탐색(BFS) : 자식 전에 모든 현재 노드를 탐색_Tree Node의 label 탐색과 같음 방문테이블과 Queue를 사용하여 탐색 C# using System; using System.Collections.Generic; using System.Text; namespace BFSpractice { class Program { static int[,] map = { { 0, 1, 1, 0, 0, 0, 0 }, { 1, 0, 0, 1, 1, 0, 0 }, { 1, 0, 0, 0, 0, 1, 1 }, { 0, 1, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0..

[C# 알고리즘] 무방향 그래프 2차원 배열로 구현하기

1: 서울 2: 대구 3: 대전 4: 부산 가중치 x using System; using System.Linq; namespace Graph { class Node { public string data; public Node(string data) { this.data = data; } } class Graph { private Node[] nodes; int[,] maps; public Graph(int n) { this.nodes = new Node[n]; maps = new int[n+1, n+1]; } public void AddVertex(Node node) { this.nodes.Append(node); } public void AddEdge(int n0, int n1) { maps[n0, n..