전체 글 483

[C#] 명시적 형변환 && 암시적 형변환

1. 형변환 어떤 자료형으로 선언된 변수를 다른 자료형으로 변환하는 것을 형변환이라고 한다. 이 때, 코드에 직접 변환 될 자료형을 입력해야 하는 것을 '명시적 형변환'이라고 하고, 변환 될 자료형을 입력하지 않아도 되는 형변환을 '암시적 형변환'이라고 한다. 2. 암시적 형변환 암시적 형변환은 작은 범위의 자료형에서 넓은 범위의 자료형으로 변환할 때 일어난다. 예를 들어, int 타입과 long 타입을 비교해보자. int 타입보다 long 타입이 더 넓은 범위의 정수를 담을 수 있다. 따라서, int 타입으로 선언된 변수는 아래와 같이 long 타입으로 선언된 변수로 변환될 수 있다. int a = 1; long b = a; 하지만 반대의 경우는 어떨까? long 타입으로 선언된 변수는 int 타입 변..

VisualStudio/C# 2022.08.22

[Unity][개념] RequireComponent란?

Unity - Scripting API: RequireComponent When you add a script which uses RequireComponent to a GameObject, the required component will automatically be added to the GameObject. This is useful to avoid setup errors. For example a script might require that a Rigidbody is always added to the same G docs.unity3d.com RequireComponent RequireComponent속성은 요구되는 컴포넌트를 종속성으로 자동으로 추가해줍니다. RequireComponent를..

Unity 2022.08.22

[C#] StringBuilder VS StringBuffer

StringBuilder는 문자열의 저장 및 변경을 위한 메모리 공간을 지닌 클래스이다. 문자열 데이터의 추가를 위한 append와 중간에 삽입을 위한 insert 메소드를 제공한다. append는 문자열을 순서대로 저장할 때 insert는 문자열을 중간에 저장할 때 위의 메소드를 통해 메모리 버퍼에 문자열을 쌓고나서 toString을 이용해 문자열을 만든다. 기본 16개의 문자저장 메모리 버퍼를 생성한다. 물론 아래와 같이 임의로 지정할 수도 있다. public StringBuilder(int capacity); // capacity 만큼의 문자저장 버퍼를 생성 문자열이 들어간 버퍼를 만들수도 있다. public StringBuilder(String str); // 문자를 저장한 문자저장 버퍼를 생성 ..

VisualStudio/C# 2022.08.22

[CS] 컴파일(Compile)이란?

서론 C, C++, Java 프로그래밍을 해봤으면 작성한 소스 코드를 빌드(Build) 혹은 컴파일(Compile)해서 실행해봤거나 코드를 잘못 작성하여 컴파일 에러가 났던 경험이 있을 것이다. 정확하게 컴파일이 어떠한 일을 하는지 모르고 막연하게 "컴파일을 하면 소스 코드의 문법을 검사하고 실행하나 보다"라고 생각했다면 이참에 자세히 알아보자. ※ 그림이나 예시는 리눅스 환경의 C언어 컴파일 과정을 중심으로 이야기하므로 언어, 환경에 따라 차이가 있을 수 있다. 컴파일의 정의 컴파일은 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업을 말한다. 우리가 C, C++, Java로 작성..

CS 2022.08.19

[CS] 프로그래밍 언어와 빌드 과정 [Build Process]

⦁ Build 란? 먼저 빌드 과정(Build Process)에 대해 간략하게 알아보고 가도록 합시다. Build 라는 단어가 '무언가를 짓다'라는 뜻인 것은 모두가 알 겁니다. 우리가 건물을 짓는다고 할 때, 설계도를 기반으로 기초공사를 하고 철근을 세우고, 벽을 세우고, 도색하고... 이러한 과정을 거쳐 집이 완성되는 과정을 짓는다고 하죠. 또 다른 예시로는 해외판 책을 우리나라 말로 번역하는 과정이라고 생각할 수도 있겠습니다. 프로그래밍에서도 마찬가지입니다. 컴퓨터는 근본적으로는 0과 1밖에 모릅니다. 우리가 작성하는 코드들은 거의 대부분 고급언어를 사용하기 때문에 결국에는 컴퓨터(CPU)가 이해할 수 있도록 번역을 해주어야겠죠. (C, Java, C++ 등 어셈블리를 제외한 대부분 언어가 고급언어..

CS 2022.08.19

[C#] EVENT 사용이유(객체 메소드와 차이점)

이벤트를 발생시키는 게시자는 구독자가 해당 이벤트를 어떻게 처리할 것인지 알 필요가 없습니다. 단지 구독자가 미리 등록해 놓은 함수(Function)들의 목록에 따라 호출하기만 하면 됩니다. 이벤트를 처리하는 구독자는 계속해서 게시자의 행동을 검사(Check)하지 않아도 됩니다. 이벤트가 발생하는 시점을 알기 위해 노력할 필요가 없고, 이벤트가 발생했을 때 호출될 메서드(Method)만 등록하면 됩니다. 이것은 구독자가 기다리고 있는 어떤 상황(Event)이 실제로 발생하면, 그 즉시 게시자가 알아서 구독자의 이벤트 처리 함수를 호출해주기 때문입니다. 따라서 구독자는 이벤트가 발생했을때 어떻게 처리할지에 대해서만 집중할 수 있게 됩니다. 이벤트 게시자와 구독자의 구조를 잘 활용하면, 서로의 상태를 검사하..

VisualStudio/C# 2022.08.18

[Unity][개념] MonoBehaviour 총정리 및 생명주기(Lifecycle)

1. 모노 (Mono) .Net은 마이크로 소프트(MicroSoft)에서 C언어에 자바의 장점을 수용하여 개발한 MS Windows 프로그램 개발 및 실행 환경이자 언어이다. 네트워크와 UI 등의 많은 작업을 캡슐화 하여 코딩의 효율성을 극대화 한 .Net 의 강력한 기능을 사용하기 위해서는 .Net 프레임워크가 설치 된 윈도우 환경이 있어야 했다. 이에 윈도우가 아닌 다른 플랫폼에서 .Net 프레임워크를 사용하기 위해 개발된 것이 얼마 전 MS에서 인수한 자마린(Xamarin) 사의 Mono 이다. Mono 는 .Net 프레임워크(framework) 의 오픈소스 개발 플랫폼으로서 크로스플랫폼(Cross-platform) 어플리케이션의 개발을 지원하며 C#과 CLI (Common Language Infr..

Unity 2022.08.11

[Unity][방법] 스크립터블 오브젝트(Scriptable Object) 기본 사용법

[이 포스트의 내용은 유튜브 영상으로도 시청하실 수 있습니다] 스크립터블 오브젝트(Scriptable Object)는 유니티에서 제공하는 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너이다. 스크립터블 오브젝트를 사용하면 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄일 수 있으며 이것은 모노비헤이비어(MonoBehaviour) 스크립트에 변경되지 않는 데이터를 저장하는 프리팹을 사용하는 프로젝트에서 유용하다고 한다. 변경되지 않는 데이터를 사용하는 프리팹의 데이터를 일반 변수로 구현할 경우 인스턴스화 할때마다 프리펩에 이 데이터에 대한 자체 사본이 생성되는데, 스크립터블 오브젝트를 사용하면 메모리에 스크립터블 오브젝트의 데이터 사본만을 저장하고 이를 참조하는 방식으로 작동한..

Unity 2022.08.11

[CS] 메모리구조

프로세스의 메모리 (RAM) 구조는 다음과 같은 형태로 구성된다. 코드 영역 메모리의 코드 영역은 실행할 프로그램의 코드(명령어) 자체가 저장되는 영역이다. 텍스트 영역이라고도 불리는데, 이 영역에서 CPU는 저장된 명령어를 하나씩 가져가서 처리한다. 데이터 영역 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. ex) 다음 변수들은 데이터 영역에 저장된다. int global_value = 10; void temp() { static int static_value = 10; } 힙 영역 메모리의 힙(heap) 영역은 운영체제에 의해 메모리 공간이 동적으로 할당되고 해제되는..

CS 2022.08.11

[Unity][팁] 유니티 기본 개념 및 설계

유니티 설계 경험 유니티를 이용하면서 내가 경험한 내용을 정리한 글이다. 이 글은 유니티를 개발하는 과정 속에서 지속적으로 업데이트 될 예정이다. 핵심 개념 다음 개념들은 알고 시작하는 것이 좋다. 유니티 버전단위 문서 유니티 버전에 따른 매뉴얼이다. 이 문서를 통해 대부분의 유니티 관련한 이용방법을 숙지할 수 있다. https://docs.unity3d.com/2021.2/Documentation/Manual/index.html Unity - Manual: Unity User Manual 2021.2 Use the Unity Editor to create 2D and 3D games, apps and experiences. Download the Editor at unity3d.com. The Unit..

Unity 2022.08.10

[C#] Task async awiat

Task 이 글은 C#에서 Task 클래스와 async, await 사용법에 대한 글입니다. 제가 이전 글에서 Thread에 대해서 설명한 적이 있습니다. 링크 - [C#] 36. 스레드(Thread)를 사용하는 방법, Thread.Sleep 함수 사용법 쓰레드라는 건 병렬 처리라는 건 몇 번을 설명했는지, 이번 글에서는 생략하겠습니다. Thread를 생성할 때는 시스템 상에서 여러가지 리소스를 사용하고 지나치게 많이 사용되면 반대로 시스템의 성능이 느려집니다. 그래서 쓰레드 풀을 생성해서 쓰레드의 개수 제한과 쓰레드 리소스의 재활용을 통해서 시스템의 성능을 향상 시킬수 있는데 스레드 상태를 제어할 수 없어서 쓰레드가 종료할 때까지 기다리는 것을 별도로 구현을 해야 하는 불편함이 있습니다. Task는 T..

VisualStudio/C# 2022.08.10

[C#] 동기와 비동기 개념

동기식 싱글 쓰레딩, 동기식 멀티 쓰레딩, 비동기식 싱글 쓰레딩, 비동기식 멀티 쓰레딩에 대해서 정리하려 한다. 동기식 비동기식 지금부터 나는 개발자이며 내가 개발한 게임을 플레이하는 유저다. 열심히 코딩해서 친구 목록을 출력하는 함수를 개발했다. 그리고 조금 과장해서 게임에서 친구가 2만 명 정도 된다. 게임에 접속해서 친구 목록을 출력하는 버튼을 클릭하고 NPC와 대화를 하려 한다. 여기서 예상되는 결과는 두 가지로 나뉜다. 첫 번째, 2만 명의 친구를 출력하는 동안 게임이 멈추고 출력이 끝나면 NPC와 대화가 진행된다. 두 번째, 화면이 멈추지 않고 NPC와 대화하는 도중에 친구 목록을 출력한다. 전자가 동기 방식이고 후자가 비동기 방식이다. 이 두 차이를 이해하는 것이 동기 비동기를 이해하는 첫걸..

VisualStudio/C# 2022.08.10

[C#] 콜백 함수와 델리게이트

목차 개요 콜백 (Callback)이란? 일상 생활에서의 콜백 예 콜백이 없었다면? 대리자 (Delegate) 대리자는 인스턴스가 아닌 형식(Type)이다. "대리자는 왜, 그리고 언제 사용을 하나요?" 개요 콜백(Callback)이란 개념을 처음 들은 것은 유니티(Unity)를 공부할 때였다. 게임이란 분야 특성상, 비동기 처리가 주를 이루는 시점에 콜백이란 개념은 필수적으로 등장하는 것 같았다. 그 당시에는 배경 지식이 아무것도 없었기 때문에 읽어봐도 무슨 말인지 몰랐다. 지금도 물론 완벽하게 아는 것은 아닐 수도 있다. 그래도 책을 보며 공부한 것을 토대로 내가 이해한 내용들을 정리해볼 생각이다. 이 글을 읽는 다른 분들께 도움이 되셨으면 좋겠고, 틀린 점이 있다면 지적도 해주셨으면 한다. 콜백 (..

VisualStudio/C# 2022.08.10

[C#] 델리게이트(delegate)와 이벤트 (event)

델리게이트 (Delegate) 델리게이트는 메소드에 대한 참조입니다. 즉, 델리게이트는 하나의 형식(type) 입니다. 델리게이트는 인스턴스 메소드, 정적메소드 모두 참조가능합니다. 프로그래밍을 할때 매개변수에 값을 넘겨 쓸모있는 메소드를 만들었습니다. 델리게이트는 값이 아닌 '코드' 자체를 넘기고 싶을때 사용할 수 있습니다. 사용방법은 다음과 같습니다. 한정자 delegate 반환형식 델리게이트이름 (매개변수_목록); 어떤 데이터를 정렬하고자 할때 오름차순이나 내림차순, 중앙부터 가까운 순으로 정렬 등, 프로그래머가 원하는 정렬방식을 사용하도록 메소드만 건네주기만 하면 됩니다. 코드를 보겠습니다. using System; using System.Collections.Generic; using Syste..

VisualStudio/C# 2022.08.10

[C#][방법,개념] Nullable Type

방법 1 static void Main(string[] args) { int? number = null; if (number != null) { int a = number.Value; } if (number.HasValue) { int a = number.Value; } } 방법 2 static void Main(string[] args) { int? number = null; int b = number ?? 0; //number가 null이 아니라면 number값을 b에 주고 null이라면 개발자가 지정한 0을 넣어줘라 } 방법 3 class Monster { public int Id { get; set; } } static void Main(string[] args) { Monster monster ..

VisualStudio/C# 2022.08.10

[C#] 구조체와 클래스 차이

C# 에서 클래스와 구조체의 차이점에 대해 간단하게 짚어보자. 대부분의 경우 클래스를 사용하는 게 더 익숙할 것이다. 우리가 생각하는 객체지향적인 목표에 맞춰 다양한 기능(함수)을 수행해야 하는 경우 클래스를 선언하고 간단하게 자료형(변수) 몇가지를 묶어 하나의 객체로 선언할 때만 구조체를 사용하곤 한다. 하지만 엄밀히 말해 구조체에도 함수를 선언해 클래스와 똑같이 사용하는게 가능하며 반대로 클래스를 구조체 처럼 사용해도 문제는 없다. 그럼에도 클래스와 구조체는 엄연히 차이점이 존재한다. 1. 클래스는 힙(heap) 영역에 할당 되지만 구조체는 스택(stack) 영역에 할당 된다. 힙과 스택의 차이점을 간단하게 설명하자면 1. 힙은 런타임에 할당되는 영역이며 new 등의 동적 할당 기능을 통해 프로그램 ..

VisualStudio/C# 2022.08.10

[C#] static 변수, 클래스, 메소드

데이터 영역 -전역변수와 static변수가 할당되는 영역. -프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸. 스택 영역 -함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역. -함수 호출이 완료되면 소멸. -늦게 할당된 변수의 메모리가 먼저 해제. 힙 영역 -프로그래머가 관리하는 메모리 영역. -동적 할당으로 생성되는 메모리 영역. static 변수는 객체를 선언만 해도 메모리가 할당되며 해당 객체를 계속 반복적으로 생성해도 그 메모리는 유지가 됨. 일반적인 변수들이 객체가 새로 생성될 때 메모리가 초기화 되는 것과는 다른 점. 프로그램 로딩시 단 한 번 클래스 내에 생성되고 동일 메모리를 계속 사용. public class MyClass { private stat..

VisualStudio/C# 2022.08.10

[C#] 전역 변수, 지역변수

전역 변수로 선언하면 어디에서든 불러오고 수정할 수 있다. 하지만 함수 안에서 변수를 선언하면 그 변수는 지역 변수가 된다. 이때 해당 변수는 함수 내에서만 존재하며 밖에서는 불러올 수 없다. 그렇기 때문에 각기 다른 함수 내에서 같은 이름의 지역 변수를 만들어도 무관하다. int a = 1; // 전역 변수(멤버 변수) void a () { int a = 5; // 지역 변수 a = 6; } 이렇게 이미 전역 변수를 선언했는데 같은 이름의 지역 변수를 선언하게 되면 그 함수 안에서는 지역 변수가 우선이 되므로 전역 변수는 무시된다. 지역 변수는 평상시 존재하지 않다가 함수가 호출되면 생성됐다가 함수가 종료되면 파기된다. 이걸 이용해 메모리 최적화가 가능하다. 접근 지정자 public class test..

VisualStudio/C# 2022.08.10