내가 일하며 알게 된 프로그래밍
article thumbnail
C# Array, List, ArrayList 차이
프로그래밍/C# 2023. 4. 23. 23:07

C#에서 Array, List, ArrayList는 모두 데이터를 저장하는데 사용되는 컬렉션 타입이다. 각 특징이라하면 1. Array -고정된 크기의 요소들을 저장할 수 있는 컬렉션 -배열의 크기는 생성 시점에 결정, 변경 불가능 -인덱스를 사용하여 요소에 직접 액세스 가능 -다차원 배열도 지원 2. List -동적으로 크기가 조정될 수 있는 컬렉션 -요소의 추가, 삭제, 수정 등이 자유로움 -인덱스를 사용하여 요소에 직접 액세스 가능 -Generic으로 구현되어 타입 안정성 보장 3. ArrayList -동적으로 크기가 조정될 수 있는 컬렉션 -요소의 추가, 삭제, 수정 등이 자유로움 -인덱스를 사용하여 요소에 직접 엑세스 가능 -박싱, 언박싱으로 인한 성능 저하가 있을 수 있음 일단 공통점은 위의 ..

article thumbnail
C# String과 StringBuilder
프로그래밍/C# 2023. 4. 15. 19:31

C#에서의 string은 string MSDN 변경불가능한 데이터 형식으로 수정할 수 없다. MSDN의 설명에서 그러하듯 string은 immutable 데이터 형식으로 수정할 수 없다. 따라서 string str = "Hello"; str += "World"; 위 처럼 수정하는건 사실 수정이 아니라 새로운 문자열 개체를 생성한다. str 문자열을 수정하는 += "World"; 에서는 Hello에 World를 포함한 실제로 새로운 문자열 개체가 생성되며, 기존의 "Hello" 문자열 개체는 GC에 의해 해제된다. 따라서 string은 문자열 조작 작업이 많다면 string보단 StringBuilder를 사용하는 것이 올바른 방법으로 보인다. StringBuilder MSDN 그러면 StringBuilde..

article thumbnail
우선순위 큐? - 근데 이제 SortedDictionary 를 곁들인...
프로그래밍/C# 2023. 4. 15. 18:46

게임 이벤트를 개발하며 이런 생각을 했다. 여러개의 이벤트가 존재하는데 각 이벤트들의 시작여부를 판단하여 제어해야한다면? 별 생각 없이 작업을 했다면 public class GameEvent { public long start_at; public ... public void Start() { //todo } } 이런 이벤트 객체가 있다면 (Queue, List 등등..) public class GameEventManager { Queue events = new Queue(); public void InitEvents() { foreach (var ev in events) { if (ev.start_at > DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()) { ev.St..

article thumbnail
Unity IL2CPP 는 무엇인가?
프로그래밍/Unity3D 2023. 4. 15. 17:36

IL2CPP 단어 뜻만 보자면 IL to CPP 유니티에서 사용하는 중간 언어(Intermediate Language) 를 C++ 코드로 변환한다는 뜻 IL2CPP는 .NET 환경을 지원하지 않는 플랫폼에서 게임을 실행할 수 있도록 지원한다. 진행 방식은 아래 처럼 코드를 작성했다고하면 public int Add(int a, int b) { return a + b; } 아래 처럼 중간언어(IL)로 변경 후 C++언어로 다시 변경하는 방식이라고 한다 .method public hidebysig instance int32 Add(int32 a, int32 b) cil managed { // Code size 7 (0x7) .maxstack 2 .locals init (int32 V_0) IL_0000: no..

article thumbnail
Unity UI 최적화 (UGUI Optimization)
프로그래밍/Unity3D 2022. 8. 24. 02:56

2021년 7월 최신화를 기준으로 작성했습니다. 유니티 공식에서 언급한 UI 관련 최적화 팁입니다. 1. Canvas 내의 UI가 많아지면 분할하자 요소가 변경될 때마다 Canvas를 최적으로 렌더링 하기 위해서 다시 한번 계산에 들어간다 따라서 요소가 많아지면 Canvas를 분할하여 관리하라 2. Raycast Target 를 사용하지 않아도 된다면 비활성화 시키자 Graphic Raycaster가 상호작용이 가능하며 Raycast Target이 활성화 되어있는 UI들을 매프레임마다 이벤트가 발생하는지 매번 검사한다 따라서 사용하지 않아도 된다면 해당 옵션은 꺼두자 *상호작용이 가능한지는 Graphic Raycaster가 판단하기 때문에 Graphic Raycaster 또한 필요하지 않다면 삭제하는게 ..

article thumbnail
Rider를 소개합니다
프로그래밍/Unity3D 2022. 8. 21. 01:58

Jetbrain에서 개발한 Rider를 소개합니다. 기존 Unity를 사용하며 개발했던 IDE는 Visual Studio 2015~2019 를 사용했지만 최근 Rider를 알고 난 후 회사에서는 못쓰지만.. 개인 프로젝트를 진행 할 땐 Rider로 개발하는 중이다. Rider의 장점과 단점 장점 최적화 코드 힌트 변경 전 변경 후 다양한 툴 제공 Color 클래스에서 Color Picker 툴 제공 (솔직히 이건 신세계였음..) Unity 함수 설명 및 Doc 연결 성능 강조 표시 쉐이더 코드 지원 Git을 연결하여 브랜치를 이동 및 비교 Unity 파일 내 사용 위치 검색 등등.. 이미 JetBrain의 IntelliJ IDEA 에서도 지원하는 기능이 Rider에서도 지원되는게 많지만 분명 Unity에..

article thumbnail
SDK와 API의 차이는 무엇인가요?
프로그래밍/ETC 2022. 8. 21. 01:10

유튜브를 보며 IBM 채널에서 API와 SDK의 차이를 설명해주는 동영상을 시청했다. 쉽게 이해한 결과 SDK : 소프트웨어 개발 키트 (Software development kit) API : 어플리케이션 프로그램 인터페이스 (Application Programming Interface) 프로그래밍적으로 말하자면 SDK는 API를 포함한다. (SDK > API , SDK가 더 큰 개념) SDK는 API, Doc, Lib, 에셋 등 프로그램을 개발함에 있어 필요한 집합체를 말하고 API는 API 제공자가 제공하는 기능들을 얘기한다. 어릴적 생각하면 과학상자는 만들고 싶은 부품들을 제공하니 SDK인셈이다. 과학상자 SDK에는 모터, 톱니바퀴, 철판 등 여러가지 부품(모듈)과각 부품들이 무슨 역할을 하는지 ..

article thumbnail
ArrayList, HashMap 등... Multi thread 관련 이슈
프로그래밍/JAVA 2022. 8. 21. 00:48

예전에 서버 개발을 하면서 AI 몬스터의 코딩을 하면서 Exception 이슈가 발생하여 문제를 찾아보았다. 문제는 ArrayList를 멀티쓰레드에서 사용하며 컨테이너내의 Index 순서가 맞지 않는 문제가 발생한 것이다. 처음에 디버그를 찍어보았을땐 맞는 순서대로 들어가는 것처럼 보였으나 ArrayList의 copy가 이뤄질때 전혀 다른 인덱스 순서가 있는 것을 확인했다. 처음엔 CopyOnWriteArrayList 를 사용하면 될 줄 알았지만. 마찬가지로 멀티쓰레드 관련 이슈를 완벽히 해결할 수는 없었다. 해결법을 알아보니 멀티쓰레드에서 사용되는 자료구조는 Concurrent 관련 자료구조를 사용해야 한다는 것을 알았다. ConcurrentHashMap, ConcurrentLinkedQueue, Co..