VisualStudio 93

[C#] 네이밍 규칙 / naming convention

네이밍 관례와 표준 표준은 아니며 각 회사 혹은 팀마다 다른 방식으로 사용할 수 있습니다. 파스칼 표기법 : 모든 단어에서 첫 번째 문자가 대문자이며 나머지는 소문자이다. 예) BackColor 카멜 표기법 : 최초에 사용된 단어를 제외한 첫번째 문자가 대문자이며 나머지는 소문자이다. 예) backColor 클래스 명에는 파스칼 표기법을 사용한다. /* * @brief : 클래스 명에는 파스칼 표기법을 사용한다. */ public class BitCoin { public BitCoin() { } } 함수 명에는 파스칼 표기법을 사용한다. void ToTheMoon(int money) { // Todo.. } 변수와 함수 파라미터에는 카멜 표기법을 사용한다. int totalCount = 100000000..

VisualStudio/C# 2022.08.22

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

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

VisualStudio/C# 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

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

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

VisualStudio/C# 2022.08.18

[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