전체 분류
C# 구조체 : 기본 매개변수를 사용한 생성자는 호출되지 않을 수도 있다
C# 구조체 : 기본 매개변수를 사용한 생성자는 호출되지 않을 수도 있다
2022.07.10문제 상황 나는 여느 때처럼 클래스 객체를 사용해 다른 함수에게 데이터를 넘겨주고 있었다. public class Tester : MonoBehaviour { private void Start() { var data = new Data(); Initialize(data); } public void Initialize(Data data) { //Something } } public class Data { public int crushId = -1; public int count = 0; public Data(int crushId = -1, int count = 0) { this.crushId = crushId; this.count = count; } } 그런데, 클래스 객체가 이곳저곳에 호출되면서 중간에 ..
존재 증명
존재 증명
2022.06.23책장 위에는 먼지가 가득 쌓여 있었다. 사람의 손을 거친 지 오래 되었으니 자연스럽고 당연한 일이다. 그러니 부자연스럽고 당연하지 않은 것은 새로이 이 공간에 들어온 그였다. 먼지 쌓인 책장을 헤집어 원하는 것을 찾기 위해 정리된 배열을 흐뜨려놓는다. 그러한 행위에 반응하는, 손과 팔의 검은 그림자가 바쁘게 한 동작도 놓치지 않겠다는 듯 움직인다. 고요했던 공간에 소리가 쌓여 간다. 종이가 서로 맞닿으며 스치는 소리를 만든다. 그리고 그 멍청이는 결국 원하던 것을 찾지 못한다. 존재를 증명하는 방법. 그가 갈망하던 지식은 이 도서관에는 존재하지 않았다. 사실은 어디에도 없다. 하지만 그가 마지막으로 도달할 수 있는 공간은 이곳 뿐이었다. 할 수 없지, 초라한 이곳에서라도 존재 증명을 실행해야만 했다. 그..
비어버린 구석의 한 자리
비어버린 구석의 한 자리
2022.06.12"그 사람, 요새는 찾아오질 않더라." A가 구석의 한 자리를 보며 툴툴댔다. 단골 한 명이 더 이상 오지 않아 매상이 줄었다고, 이제는 적극적으로 손님들에게 다가가야 한다고. 내가 반응하지 않자 한숨을 내쉬며 이야기를 듣고는 있냐고 떠들어댔다. "더 마음에 드는 곳이 생겼나 봐." 그렇게 말하고는 입을 닫았다. 더 이상 생각하고 싶지 않았던 탓이다. 다시 나는 테이블을 닦기 시작했다. 그 구석 자리로 다가갈 때마다 어쩐지 마음 속이 허전했다. 단골이었음에도 불구하고, B와 내가 그다지 대화할 일은 없었다. 그는 말없이 가게에 찾아와 메뉴를 주문했고 나는 내어주었을 뿐이다. 대화를 하는 것은 주로 A였다. 그 뒤 B는 이곳이 편안했는지 자주 들렀다. 그러니 가게에 늘 그가 존재하는 것은 아주 오래된 흔한..
Unity Null Check할 때 성능을 개선할 수 있는 방법
Unity Null Check할 때 성능을 개선할 수 있는 방법
2022.05.01Null 체크로 해당 객체가 실제로 존재하는지 확인하는 일은 매우 자주 발생하곤 한다. 그런데 최근 IDE를 VS에서 Rider로 갈아탔더니 null 체크를 할 때마다 이것저것 알려주었고, 충격적인 사실을 여러가지 알게 되었다. UnityEngine.Objects UnityEngine.Object는 유니티 엔진에서 관리하는 오브젝트이다. 그리고 유니티는 실제로는 C++로 작성되어 있다. 그리고 C++은 가비지 콜렉터가 존재하지 않는 언어이다. 즉, 언어가 아닌 유니티가 가비지 컬렉터를 관리하고 있다는 뜻이다. UnityObjects를 Destory를 한 뒤 null 체크를 했을 때, 로그에서는 null이 맞다고 뜨니 의심을 품지 않게 되기 마련이다. 그러나 실제로는 null로 객체를 초기화해주지 않았기 ..
어드레서블 에셋 (1)
어드레서블 에셋 (1)
2022.04.10본 글은 공부하며 작성하였습니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. 어드레서블 에셋을 실제로 사용해보기 전에, 영상을 보고 공부할 점을 정리해보았다. 에셋 번들과 어드레서블 에셋의 차이 어드레서블 에셋 에셋 번들 - 에셋에 주소를 지정할 수 있는 방식 - 에셋 번들처럼 카테고리를 분류할 수 있음 - 사용법이 복잡하지 않음, 인스펙터에 연결하여 사용도 가능함 - 에셋들을 하나로 묶어 압축 파일을 생성하는 개념 - 생성된 에셋 번들을 네트워크를 통해 배포하여 사용 (다운로드 콘텐츠, DLC 등) - 불러오는 코드를 작성하기가 대단히 불편함 어드레서블 개요 - 최소 2018.2 이상의 유니티 버전 사용할 것 - 스크립트를 이용한 관리 가능한 빌드 파이프라인과 리소스 매..
Enum.ToString 최적화하기
Enum.ToString 최적화하기
2022.02.25프로파일러를 뚫어지게 쳐다보다가 이상한 것을 발견했다. 별 생각 없이 사용하고 있던 enum값의 ToString()이 파멸을 초래하고 있었다. 한번 Call을 할 때마다 0.003ms를 먹어치우고 있던 상황. 코드에서는 1프레임에 80번을 호출하고 있었으니 자그마치 0.24ms를 차지하고 있던 셈이다. 찾아보니 원래 enum.ToString()은 값이 비싼 메서드라고 한다. 왜냐면 리플렉션을 사용하니까! 조금만 생각해봐도 값이 비싼건 당연한 것이다. 이를 해결하기 위해서 다양한 방법들을 찾아보았다. 1. 자체 Dictionary에 캐싱 //데이터는 입력되었다고 가정 private readonly Dictionary e_s_cache = new Dictionary(); public string ToStri..
~01/07 Log
~01/07 Log
2022.01.07
BlackOut (2021)
BlackOut (2021)
2021.11.30자고 일어났더니, 모르는 호텔의 바닥에서 깨어났다. 분명 어제는 술자리가 있었다. 필름이 끊긴 것일까? 안녕하세요, 더블즈비(Doublsb)입니다. 전 닉네임은 쌍쌍뱌였습니다. 본 게임은 2021 1치킨 알만툴 게임잼 참여작입니다. 게임잼의 주제는 탈출입니다. 탈출 게임의 형태지만 마음 먹으면 나갈 수는 있는 평화로운 분위기에서 진행합니다. 플레이타임은 15분 내외이며, 엔딩은 3개입니다. 제작자 닉네임을 표기하는 것으로 플레이 영상 공개 및 스트리밍을 허용하고 있습니다. 더블즈비, Doublsb, 쌍쌍뱌 중 적당한 것을 골라 제작자명을 표기해 주세요. 예전부터 구현하고 싶었던 키워드 기반의 추리/어드벤처 게임입니다만, 심도있게 구현하지는 못했네요. 시스템은 구현해뒀으니 언제든지 만들 수 있다는 것에 위..
[.Net C# 설명서] 읽고 정리하기
[.Net C# 설명서] 읽고 정리하기
2021.09.29본 글은 공부하며 작성하였습니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. 내용 출처https://docs.microsoft.com/ko-kr/dotnet/csharp/tour-of-csharp/ C# 둘러보기 - C# 가이드C#을 처음 사용하시나요? 언어의 기본 사항에 대해 알아봅니다. 이 개요에서 시작합니다.docs.microsoft.com 최근에 기초를 더 탄탄하게 다져야 한다고 느껴서, C# 라이브러리를 읽고 정리해보기로 했다. 이전 글과 마찬가지로, 전체 내용보다는 새롭게 배웠거나 필요성을 느낀 내용들을 정리해보려 한다.부호 있는 정수와 부호 없는 정수부호 있는 정수 : sbyte, short, int, long 부호 없는 정수 : byte, ushort, ui..
프로그래머스/위클리 챌린지/최소직사각형
프로그래머스/위클리 챌린지/최소직사각형
2021.09.27https://programmers.co.kr/learn/courses/30/lessons/86491 풀이 - 모든 명함이 들어갈 수 있는 가장 작은 지갑을 만들어야 한다 - 명함을 회전시켜서 넣을 수도 있다 - 지갑의 크기를 출력해라 - 그냥 최대값을 구하는 문제인데, 회전 가능한 부분만 고려하면 된다 - 명함들을 긴 쪽을 가로, 짧은 쪽을 세로로 보이도록 회전했다 - 가로와 세로의 최대값을 구해 곱하면 된다 C# using System; public class Solution { public int solution(int[,] sizes) { int width = 0; int height = 0; for(int i=0; i temp.t1) { //Swap int t3 = temp.t1; temp.t1..
[C# 코딩의 기술]에서 얻은 지식들
[C# 코딩의 기술]에서 얻은 지식들
2021.09.24본 글은 공부하며 작성하였습니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. https://ridibooks.com/books/754016655 C# 코딩의 기술 (기본편) : 똑똑하게 코딩하는 법 초보자가 놓치기 쉬운 실수나 이슈, 패턴을 소개하고 그 해결법을 에피소드 형식으로 제시해주는 C# 활용서 C# 제대로 알고 쓰자!C#은 C/C++, 자바와 문법이 비슷하지만, 구조적으로나 태생적으로 ridibooks.com 오늘 'C# 코딩의 기술' 서적을 드디어 다 읽었다. 대화 형식으로 C#의 꿀팁들을 설명해주는 게 좋은 책이었는데, 후반부로 갈 수록 어쩐지 내용에 힘이 빠지는 게 느껴져서 아쉽긴 했다. 어쨌든, 새롭게 얻은 지식들을 정리해보겠다. IEnumerable 인터..
프로그래머스/위클리 챌린지/입실 퇴실
프로그래머스/위클리 챌린지/입실 퇴실
2021.09.23https://programmers.co.kr/learn/courses/30/lessons/86048 풀이 - 입실, 퇴실 순서 배열이 주어진다 - 입실과 퇴실의 시간은 기록되어 있지 않으며, 입실/퇴실이 동시에 이뤄지는 경우는 없다 - 각 사람 별로 반드시 만난 사람 수를 반환해야 한다 - 규칙 찾느라 좀 헤맸는데, 아래와 같이 풀었다. C# using System; using System.Linq; using System.Collections.Generic; public class Solution { public int[] solution(int[] enter, int[] leave) { var interSect = new List(); var answerHash = new Dictionary(); ..