본문 바로가기
728x90
반응형

C#19

[C#] 대리자(Delegate; 델리게이트)와 무명 메서드(+람다식 기초) C#에서 중요한 개념 중 하나인 대리자에 대해서 정리해보겠다. 이후 이벤트와 연계해서 많이 사용한다.  대리자 (Delegate)대리자는 말 그대로 "대신하는" 형식으로, 매개변수와 반환 형식을 지정해서 메서드를 여러개 참조할 수 있다. 예를 들어, 플레이어가 쓰는 한 스킬이 여러 기본 동작을 연계하는 것이라면, 새로운 메서드를 만들거나 해당하는 메서드를 모두 입력하는 것이 아니라 대리자에 플레이어의 동작에 해당하는(지정된 매개변수와 반환 형식) 메세드들을 등록하는 것으로 손쉽게 객체 지향적으로 구현할 수 있으며, 이는 이후 이벤트와 연계하기 좋다. 대리자 사용법using System;class DelegatePractice{ //함수(메서드)들 생성 static void Hi() => Con.. 2024. 4. 26.
[C#] 참조 매개 변수, ref와 out의 차이점 빠르게 진도를 나가서 비동기 프로그래밍이랑 쓰레드 나가고 싶지만, 자꾸 익숙하지 않은 단어와 문법이 보여서 기초를 다 잡고 가야할 것 같아 열심히 처음 보는 단어와 개념을 찾아 정리하고 있다... 이 글은 out이 뭔지 이해하지 못한 과정에서 쓰게 되었다.  참조 매개 변수 코드를 작성하다보면, 함수나 메소드로 int형 매개변수를 입력받아 연산 후 입력받은 외부 변수를 초기화 또는 변경할 필요가 생길 경우가 있다. 이를 간편하게 지원하는 것이 바로 참조 매개 변수이다. 그 중 자주 쓰이는 ref와 out을 살펴보고 둘의 쓰임새의 차이점을 살펴본다. ref : 메서드 내에서 매개 변수의 원본을 변경(할당)"할 수 있도록" 하는 키워드메서드를 호출하기 전에 인수를 초기화해야 한다.매서드는 매개 변수에 새 값.. 2024. 4. 25.
[C#] 값 형식과 참조 형식, 박싱과 언박싱(힙 메모리), is 연산자와 as 연산자 C#에서 데이터 형식은 값에 접근하는 방식에 따라 값 형식(value type)과 참조 형식(reference type)으로 나눌 수 있다. 또한 데이터를 전달하는 과정에서 값 형식과 참조 형식을 서로 번갈아 가며 형 변환해야 할 필요가 생길 수 있다. 이때 박싱과 언박싱이 발생한다. 이 내용은 제네릭 포스팅에서 간단히 언급했었는데, 왜 박싱, 언박싱이라고 표현하는지, 왜 추가적인 자원을 소모하는지를 공식 문서의 그림과 함께 메모리의 관점에서 좀 더 자세히 다뤄보겠다.  값 형식(value type)과 참조 형식(reference type)값 형식 : 개체에 값 자체를 담고 있는 구조. int, double 등의 자료형은 기본적으로 값 형식의 데이터 구조이다.값 형식으로 데이터를 전달한다는 것은 변수의 .. 2024. 4. 25.
[C#] 다차원 배열과 가변 배열(C/C++ 문법과 차이점) 기존에 대학교에서 C/C++(메인)과 파이썬(서브)로 배웠기 때문에, 기본적인 C#의 문법은 빠르게 스킵하며 넘어갔었다. 그런데, 생각보다 미묘하게 기본 문법을 표현하는 방식이 달라서 아주 자주 쓰는 다차원 배열 표현법에서 내가 착각했던 부분을 정리하고 넘어가려고 한다.   C# 다차원 배열 사용법Array 클래스를 사용하기 위해서는 우선 네임스페이스를 선언해야 한다. //네임스페이스 선언using System; 1차원 배열 사용법using System;class ArrayPractice{ static void Main() { //1차원 배열 선언 int[] array1; //1차원 배열 할당(인스턴스 생성) array1 = ne.. 2024. 4. 25.
[C#] 널(NULL) 관련 형식[Nullable<T>] 및 연산자[??, ?.] 개인적인 경험으로는 프로그램을 할 때 오타를 제외한 대부분의 오류는 null 체크를 제대로 하지 않는 경우에 발생하는 것 같다. C#에서는 null을 다루는 형식과 연산자가 따로 있다고 해, null의 개념과 관련 내용을 정리해보겠다.  널(null) 값null은 의미 있는 값이 없음을 의미한다. 단, 아무것도 없는 "Empty"의 개념보다 알 수 없는 "undefined"의 개념에 더 가깝다. null을 주로 접하게 되는 경우참조형 변수를 선언한 후 초기화하지 않은 경우알려지지 않는 값을 가리키고 있어 의미 없는 경우변수 또는 개체가 생성된 후 아무런 참조를 하지 않은 경우가리키고(참조하고) 있던 데이터가 소실되어 가리키는 데이터가 의미 없어진 경우 즉, 주로 무엇인가를.. 2024. 4. 24.
[C#] 제네릭(Generic) 클래스 System.Collections 네임스페이스에 있는 클래스들은 몹시 유용하지만, 모든 타입의 데이터를 수용하기 위해 Object형으로 데이터를 저장하기에 연산을 위해서 형변환을 하거나 타입 체크를 하기 번거롭고, 속도 자체도 느릴수밖에 없다. 이를 개선해서 설정한 타입만을 데이터로 받는 제네릭 컬렉션 클래스가 있다. 이에 대해 간단히 정리하겠다. 관련 네임스페이스 : using {NAMESPACE}로 사용자주 쓰이는 클래스SystemArraySystem.CollectionsStack, Queue, ArrayList, HashtableSystem.Collections.GenericStack, Queue, List, Dictionary  Stack 제네릭 클래스.. 2024. 4. 24.
[C#] 컬렉션(Collection) 클래스 배열처럼 자주 쓰이는 특정 항목의 집합을 컬렉션 또는 리스트라고 한다. 배열과 .NET에서 제공하는 컬렉션 관련 클래스들 중 특히 유용하다고 생각되는 부분만 요약 정리하겠다. 배열이 아닌 컬렉션 클래스의 경우 정적(static)이 아니기 때문에, 사용하기 위해서는 각 클래스의 인스턴스를 선언(생성)해야 한다. 관련 네임스페이스 : using {NAMESPACE}로 사용자주 쓰이는 클래스SystemArraySystem.CollectionsStack, Queue, ArrayList, HashtableSystem.Collections.GenericStack, Queue, List, Dictionary  Array 클래스 주요 메서드Array.Sort() : .. 2024. 4. 24.
[C#] Rider 내 실습용 콘솔 솔루션 생성 & 유용한 문자열 형식, 표기법 Rider IDE를 활용해 C# 실습용 콘솔 솔루션 및 프로젝트를 생성하고, 언어를 처음 배울 때면 가장 먼저 하는 Hello World 출력과, 문자열 출력에 쓸 수 있는 간단한 포맷을 정리한다.  콘솔 솔루션 생성Rider을 실행한 후 초기 화면에서 새로 솔루션을 생성하기 위해 오른쪽 상단의 "New Solution" 버튼을 선택하기 Project Type - Console 선택 후, 솔루션과 프로젝트 이름, 경로를 적절히 설정해 Create으로 생성하기 생성된 솔루션 & 프로젝트 내의 소드코드에 "Hello World"를 출력하도록 작성해 실행하기  원래 위에서 Create 버튼을 눌러 생성한다면, 솔루션과 프로젝트가 각각 하나씩 생성된다. 나는 추가적으로 솔루션.. 2024. 4. 23.
[C#] 초기 개발 환경 설정(Rider) 및 유니티 연동 + SDK 8.0 설치 많은 고민 끝에 AI, 데이터사이언스를 메인으로 공부하는 것보다 유니티, C#을 메인으로 배워서 게임, VR/AR 콘텐츠 개발 쪽을 메인으로 미는 것으로 방향성을 결정했다. 앞으로 관련해서 서적, 강의등을 바탕으로 공부한 내용을 요약 및 정리해서 올릴 예정이다. 우선 제일 먼저 C#를 실습하기 위해 개발환경을 구성하는 것부터 시작한다.  개발 환경 설정https://www.jetbrains.com/rider/ Rider: The Cross-Platform .NET IDE from JetBrainsDevelop .NET, ASP.NET, .NET Core, Xamarin or Unity applications on Windows, Mac, Linuxwww.jetbrains.com .. 2024. 4. 23.
728x90
반응형