본문 바로가기
728x90

Study24

'Call by value'와 'Call by reference'의 차이 함수 호출 방법은 크게 두가지가 있다. Call by value(값에 의한 호출) Call by reference(참조에 의한 호출) 이를 설명하기 위해, 많은 교재에서는 그림으로 예시를 들고 있다. 예를 들어, 컵에 물을 채워서 이 물을 직접 가져다가 다른 컵에서 사용하느냐, 아니면 똑같은 컵과 물을 한 컵 더 준비하여 사용을 하느냐라는 식이다. 언뜻 보면 이해가 쉬울 수 있지만, 오히려 헷갈릴 수가 있다. 이는 프로그래밍적으로 직접 접근해서 알아보는 것이 가장 확실하다. Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다. Call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 간단히 말해 값을 복사를 하여 처리.. 2022. 9. 13.
프로그램의 정확 시간 측정이 어려운 이유와 해결 방법 제시 예시 아래와 같이 OS 시간 조작 방지를 위해, 커스텀 타이머 클래스를 제작하였다고 가정합시다. using System; using System.Threading.Tasks; /// /// 프로그램 커스텀 타이머 /// public static class MyTimer { static DateTime startTime; static long millisecond = 0L; public static void Start() { startTime = DateTime.Now; TimeUpdater(); } private static async void TimeUpdater() { while (true) { await Task.Delay(1); ++millisecond; } } public static DateT.. 2022. 8. 16.
C#, 우선순위 큐 개념과 힙을 통한 구현 우선순위 큐란? 큐(Qeueu)는 FIFO(First In First Out) 방식을 따르기 때문에, 입력 순서대로 출력되는 데이터 구조인 반면, 우선순위 큐(Priority Qeueu)는 입력 순서와는 무관하게 우선순위대로 출력되는 데이터 구조입니다. 시간 복잡도 우선 순위 큐는 Enqueue()시, 내부적으로 정렬을 해주거나 또는 탐색을 해주어야하는 로직이 필요합니다. 우선 순위대로 정렬하거나 탐색하는 방법으로 얼마나 효율적으로 만드느냐가 주제의 핵심 포인트가 되겠습니다. 이 글에서는 'O(N)'과 'O(logN)' 두 가지 방식을 다룹니다. 우선순위 큐 구현 방법과 종류 Queue의 Enqueue()시, 내부적으로 효율적인 탐색 방법이 필요하다. 간단한 구현 방식으로는 'O(N)'의 복잡도를 가지고.. 2022. 7. 10.
C#, Enum 'Flags' Technic 'Flags' 어트리뷰트Enum 타입을 이진수로 구성하여 사용할 수 있도록 해줍니다. 이는 하나의 Enum 변수가 여러개의 값을 가질 수 있도록 가능하게 해줍니다.예제using System;public class Example{ [Flags] private enum eCheck : byte { None = 0, Apple = 1 위의 코드에서 보시다시피 Enum을 '[Flags]' 어트리뷰트로 선언하고, 각각의 값에 대해서 시프트 연산으로 값으로 표현해줍니다. 그리고 이후 변수를 선언 후 이진연산을 통해서 값을 추가해줄 수 있습니다.이미지이미지 예시를 보면 이진 연산으로 실제로 이진값으로 111로 들어갔습니다. 이는 'Apple | Bana.. 2022. 2. 28.
Unity, 코루틴과 멀티쓰레드의 차이 코루틴과 멀티쓰레드 코루틴을 통하여 마치 멀티 쓰레딩을 할 수 있지만, 사실 이는 멀티 쓰레딩과는 거리가 있습니다. 코루틴(Coroutine) 매 프레임마다 스케쥴링으로 관리가 됩니다. 매 프레임에서 IEnumerator의 반복기 형태로 호출되며 체크합니다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class CoroutineTest : MonoBehaviour { private void Start() { StartCoroutine(DelayedHelloWorld(2f)); // 2초 뒤에 출력 StartCoroutine(DelayedHelloWorld(1f)); // 1초 뒤에 출력 Star.. 2022. 2. 12.
HTTP 통신과 TCP 통신의 차이와 이해 HTTP 통신 HTTP통신은 Question을 물어보면 반드시 Answer이 돌아오는 비연결지향적인 단방향 통신입니다. 언제든 요청을 하면 그에 해당하는 값으로 답을 줍니다. HTTP라는 말에서 보셨듯이, 주로 인터넷 페이지를 예로 들 수 있습니다. 우리는 현재 보고 있는 페이지를 요청해서 받아서 결과로 처리받을 화면을 보고 있으며, 단방향 통신으로 현재는 항시 연결되어 있다고 보지 않습니다. 단순하게 요청에 대한 응답을 받았으면 이미 끝난 것이기 때문입니다. (클라이언트가 요청 -> 서버에서 응답) TCP통신 (socket 통신) TCP통신은 Handshake라는 과정으로 서로가 통신을 할 수 있는 상태를 먼저 인증을 하고 나서 통신을 하는 연결지향적인 양방향 통신입니다. 이는 서로에게 언제든 실시간으.. 2022. 2. 10.
C#, 매개 변수 한정자 out과 ref 기능 및 class 사용 이유 C# 매개 변수 한정자 out과 ref 매개 변수 참조하는 문법 중 하나이며, out과 ref가 따릅니다. out: 매개 변수를 참조하며, 초기화를 요구합니다. 사전에 변수에 초기 값을 요구하지 않습니다. ref: 매개 변수를 참조합니다. 따라서 사전에 명시적인 초기값이 필요합니다. 예제 public class Example { private bool AddCount(ref int count) { if (count < int.MaxValue) { count++; return true; } else return false; } private void Start() { int count = 0; bool isAdded = AddCount(ref count); // resut // count = 1; } } .. 2022. 2. 9.
C#, 쓰레드 동기화를 위한 뮤텍스와 셰마포어 예제 쓰레드 동기화 쓰레드 동기화법 중에서는 대표적으로 아래 두 가지가 있습니다. 뮤텍스(Mutex) 셰마포어(Semaphore) 다중 쓰레드를 사용하게 된다면, 동기화 작업은 필수로 구성되어야합니다. 자칫 잘못 사용할 경우, 데드락에 걸릴 수 있으며, 쓰레드간 호출 순서가 보장되지 않아, 전역으로 선언된 값들이 의도치 않게 변경될 수도 있습니다. 동기화법에 관련되어서 예제와 함께 차근차근 알아보겠습니다. 뮤텍스(Mutex) 뮤텍스는 기본적으로 하나의 자원을 순차적으로 사용하도록 요구하는 구조입니다. 쓰레드1, 쓰레드2, 쓰레드3 ... 등등 여러 쓰레드가 한 곳을 가리킨다면 순서대로 연산이 완료될 때까지 기다렸다가 순서를 넘겨주는 방식입니다. 아래의 코드는 여러개의 쓰레드가 순차적으로 실행이 됩니다. usi.. 2022. 2. 2.
Unity, ScriptableObject 사용 예제 ScriptableObject란? 유니티에서 제공하는 기능으로, 하나의 데이터 폼을 만들 때 사용합니다. 주로 특정 스테이터스, 레벨 디자인 등에서 사용되고 있습니다. 예제 아래와 같이 하나의 폼을 작성합니다. using UnityEngine; [CreateAssetMenu(fileName = "CharacterBaseStatsData", menuName = "ScriptableObjects/CharacterBaseStatsData", order = 1)] public class CharacterBaseStatsData : ScriptableObject { public int Hp; public int Defence; public int Damage; public int AttackSpeed; publi.. 2022. 2. 2.
반응형