분류 전체보기 521

[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

[C#] 값 형식(Value Types)과 참조 형식(Reference Types)

값 형식 : 변수가 값을 담는 데이터 형식. 참조 형식 : 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식. 이 둘을 이해하려면 두 가지 메모리 영역에 대해 알고있어야 한다. 바로 스택(Stack)과 힙(Heap)이다. 이 메모리 영역 중 값 형식과 관련이 있는 것은 스택 메모리 영역이고, 참조 형식과 관련 있는 것은 힙 메모리 영역이다. 1. 스택과 값 형식. 스택에 대해 이야기 해보자. 스택의 구조는 마치 책상 위에 쌓인 책이라고 생각하면 된다. 맨 밑에 있는 책을 읽고 싶다면, 위에 있는 책들을 모두 걷어낸 후에나 가능할 것이다. 스택 메모리도 이렇게 동작한다. 다음과 같은 코드를 작성했다고 하자. { // 코드 블록 시작 int a = 10; int b = 20; int c = 3..

VisualStudio/C# 2022.08.10

[CS] 스택(Stack)과 힙(Heap) 차이

Stack (스택) 이란? - 프로그램을 실행하는데 필요한 메모리 공간으로 메소드가 호출되는데 필요한 메모리는 스택에 저장된다. 여기서 이야기하는 메소드가 호출되는데 필요한 메모리는 지역변수, 매개변수, 리턴값 등이다. Stack Frame (스택프레임) - 메소드를 호출하기 전에 반드시 호출에 필요한 메모리를 스택에 만들어야 하는데, 이 때 하나의 메소드에 필요한 메모리 덩어리를 묶어서 '스택프레임' 이라고 한다. 즉, 하나의 메소드에는 하나의 스택프레임이 존재하는 것이다. 스택프레임의 구성 요소로는 위에서 이야기한 지역변수, 매개변수, 리턴값 등이 있다. 메소드 호출과 스택메모리 - 하나의 메소드를 호출하면 그 메소드에 해당하는 하나의 스택프레임이 스택에 만들어진다. 스택에 만들어진 메모리는 메소드의..

CS 2022.08.10