개발잡소리(11)
-
[ 개발 잡소리 ] StringBuilder를 사용해보자
StringBuilder를 알고 있는가?StringBuilder는 문자열을 효율적으로 다루기 위한 C# 내장 클래스이다.간단히 말해서 문자열을 반복적으로 수정하거나 추가할 때에 StringBuilder를 사용하면 성능이 훨씬 좋아진다.그냥 String을 쓰면 안 되나??string을 쓰면 안 되는 게 아니다. 일반적인 경우에서는 그냥 string을 넣는 게 맞다.다만. 몇 가지 경우에 string을 쓰는 것이 엄청난 오버헤드가 발생한다. C#에서 string은 불변(immutable) 객체이기 때문에. 기존 문자열을 수정하면, 기존 문자열을 바꾸는 게 아니라새로운 문자열을 새로 만들고 기존의 문자열은 버리는 식으로 작동한다.string result = "";for (int i = 0; i 내부적으로 매..
2025.04.09 -
[ 개발 잡소리 ] 제네릭과 템플릿
이게 뭐지?제네릭은 C#에 존재하는namespace인데 이는 여러 유용한 자료구조 클래스들을 지원해 주고이런 것들에는 List, Queue, Stack, Dictionary가 있다. 이런 자료형에 대한 부분 중에 Stack과 Queue는 다른 글에서 앞서 설명한 적이 있으니 생략하고List와 Dictionary에 대한 설명을 하겠다. ListList는 길이에 제약을 받지 않는 가변길이 배열이다.C++로 치면 vector에 해당하는 개념인 것이다.사용 예제는 이러하다. List numberList = new List();일반적인 정적 배열과는 달리 가변길이 배열이기 때문에Add나 Remove와 같은 메서드를 통해 리스트의 요소들을 쉽게 관리할 수 있다. 하지만 이 List가 편하고 좋다고 완전히 배열을 대..
2024.09.10 -
[ 개발 잡소리 ] 메모리 구조
메모리 구조는 무엇일까?딱딱한 정의부터 말하자면 메모리의 구조란프로그램이 실행될 때 운영체제가 프로그램에게 제공해 주는 공간의 구조이다. 개발에 있어서 이 메모리 구조라 함은 코드를 이해함에 있어서 굉장히 중요한 내용이자어쩌면 상식 중에서도 상식이라고 할 수 있다. 우리가 아무 생각 없이 사용하는 변수들이나 코드들까지 모두 메모리의 어딘가에 0과 1로써저장된다는 사실을 알고는 있을 것이다. 하지만 이들이 정확히 어디에 저장되는지는별로 알 필요가 없다고 생각할 수 있다.당연히 메모리 커널의 몇 번 줄에 몇 번 칸부터 몇 번까지 딱딱 들어있는지 알필요는 없으나어느 영역에 들어가 있는지는 알 필요가 있다. 왜 알아야 하는지에 대한 얘기는 이쯤 하고 설명하겠다. 우선 이 메모리 구조란 놈은 앞서 언급했듯이프로..
2024.07.26 -
[ 개발 잡소리 ] HashCode와 String (Java 잡소리)
Java의 System객체에는 IdentifyHashCode()이 있고모든 Object를 상속받은 자료형에는 HashCode()라는 기본함수가 들어있다. 뭐가 다른 걸까?System.IdentifyHashCode()이 녀석이 뭐 하는 놈이냐면 () 안에 들어온 객체의 메모리를 기반으로 하는 해시코드를 뽑아서 반환해 준다.단순히 주소를 보기 쉽게 숫자로 싹 한번 바꿔서 보여주는 애라고 알면 된다.따라서 동일한 객체라도 두 번 생성되면다른 메모리 주소를 가지므로 다른 identifyHashCode해쉬를 반환한다. HashCode()그러면 이 해시코드란 놈은 뭐 하는 놈인가 기본적으로 해시코드는 객체의 내용에 따라서 생성된다.Object클래스에서 상속받아 구현된 메서드로 모든 객체에서 사용할 수 있는기본함수(..
2024.07.25 -
[ 개발 잡소리 ] SOLID 원칙
SOLID 원칙이란?객체지향의 핵심원리.객체지향으로 코딩을 하면서 지켜야 할 규칙? 에티켓 같은 것이다 유니티에서 공식으로 낸Level Up Your Code WithGame Programming Patterns라는 책에도 실려있는 내용이다 게임개발에 연계해서 잘 설명해 놨으니 한 번쯤 보시길( 원래 영어로 되어있었는데, 유니티 코리아가 번역 잘해줌 ) 눈치 챈사람도 있겠지만 이것들은 모두 약자들이다 하나하나 이야기해 보자 SOLID 규칙의 S는 Single Responsibility, 단일 책임이다.말 자체에서 느껴지듯이 모든 클래스는 단 하나의 책임만을 진다는 뜻이다.예를 들어 PlayerController 안에서 Input과 움직임, 체력관리를 동시에 해서는 안된다는 뜻이다. 이러한 본인 ..
2024.06.23 -
[ 개발 잡소리 ] Queue, Stack
Queue, Stack 이 뭘까 알고리즘문제를 풀어봤거나 관심이 있다면 알고 있을 것이다 일단 값을 넣고 넣은값들을 다시 빼내는 것이 주목적으로 쓰이는 놈들이고Push, Pop과 같은 전용 메서드들 을 통해 관리한다따라서 큐와 스택은 배열의 일종의 자료 형태라고 볼 수 있는데배열과 다른점이 나름의 규칙이 존재한다 그것은 선입선출(FIFO)과 선입후출(FILO)의 개념인데 선입선출은 먼저 들어온놈이 먼저 나가는 순서를 가진다는 의미이다(First in First out)선입선출의 데이터 흐름은 규칙에 따라이런 식으로 들어가고 빠져나간다 먼저 들어온 0이라는 값이 값을 뺄 때 먼저 나간다는 뜻이다.이러한 형태의 흐름을 가지는 것이Queue이다일반적인 순서 대기열을 생각하면 된다 선입후출은 먼저들..
2024.04.27 -
[ 개발 잡소리 ] 시간 복잡도 (Time Compleity)
시간복잡도란알고리즘의 성능을 분석, 평가할 때 사용하는 방법의 일종이다 알고리즘의 성능을 분석하는 방법은 여러 가지가 있는데 1. 진짜로 실행시켜서 걸린시간을 측정하는 방법이 있고2. 알고리즘의 복잡도를 분석하여 알아낼 수도 있다 알고리즘의 복잡도를 분석하는 방법은직접 코드를 실행시키지 않고도 분석이 가능하고알고리즘에서 수행되는 연산의 횟수를 측정하여 비교한다 이 알고리즘의 복잡도에는 두가지의 내부 개념들이 추가로 있는데바로 공간 복잡도와 시간 복잡도이다 공간복잡도는 코드 실행 시 필요로 하는 메모리 공간을 분석하는 부분이고시간복잡도는 코드 실행 시간을 분석하는 부분이다 수행시간은 여러 경우에 해당하는 입력에 대한 기본연산들의 횟수이다* 기본 연산 (산술, 대입, 비교, 이동) 대충 3가지가 있는데최선,..
2024.04.16 -
[ 개발 잡소리 ] 변수와 상수 그리고 자료형 약간
변수는 무엇인가상수는 무엇인가 수학시간에 어느 정도 졸지 않았던 학생들은 대충 예상이 될 수도 있다 간단하다 변수는 변할 수 있는 수상수는 상할 수 있는 수가 아니라변하지 않는 수이다 (예 : PI 3.141592...) 코딩을 하면서 엄청나게 많이 사용하는 약속어이며일반적으로 값을 담아놓는 상자의 개념이다 언어에 따라 선언방법이 다른데js와 C#을 기준으로 설명할 것이다 변수는 선언 후 초기화, 값 변경, 대입 연산등이 가능하지만상수는 선언 후 초기화를 코드에서 하고 나면 값을 절대 변경할 수 없다 일반적인 변수선언 방법은 [선언키워드] [변수명] = [초기화값]; 이러하다예시는 다음과 같다 C#int number = 3;JSvar number = 3;두 언어에 약간 (약간 아님)의 차이가 보이는 이..
2024.03.23 -
[ 개발 잡소리 ] 참조는 무엇인가
C언어나 C++ 등 포인터와 같은 참조를 처음 접할 때전두엽과 측두엽이 지끈거리는 것을 온몸으로 느낄 수 있다 참조가 뭐길래? 참조는 무엇인가참조는 원본이 존재하고 다른 변수나 파일에서그것을 '참조' 즉 원본의 주소를 가지고 있거나 참조자를 통해원본으로부터 값을 공유받는 것 무슨 말인지 하나도 모르겠다 참조를 비유한다면 비유할 대상은 많다예시를 하나 들어보자만약 조별과제를 팀을 짜서 하고 있다고 치자 A, B가 한 팀인데A가 보고서를 작성하고, B가 자료를 수집한다 각각의 대상이 자료를 만드는데 1. B는 A에게 수집한 자료 문서 사본을 넘겨준다 2. A는 구글 문서에 보고서를 작성하여 링크를 B에게 주었다 두 경우의 차이가 느껴지는가?두 가지의 차이는 동..
2024.03.19