C# 8

C# - ??, is, as 연산자와 패턴 일치 기법

?? ?? 연산자는 null 판별할 때 쓰인다. string result = str ?? "str is null"; 만일 str 이 null이면 오른쪽에 있는 "str is null" 이 result에 들어가고null이 아니라면 str 그대로 result에 들어간다. ??=str ??= "str is null"; 이런식으로 쓰이면 만일 str이 null이면 "str is null"이 str에 들어가고null이 아니면 str 값 그대로 유지하는 것이다. str ??= GetDefaultValue(); 이런식으로 null일 때는 기본값을 설정하는 함수의 반환값으로 설정할 수도 있다. is is는 영어 is랑 비슷하게 생각하면 된다. A is B하면 A == B로 생각할 수 있다. 다만 is 뒤에는 변수가 오..

C# 2024.06.17

C# - Clamp 함수와 사용 예제

Clamp 함수가 무엇이며 어떨 때 쓰이는 지 알아보도록 하자 Mathf.Clamp 함수는 한마디로 value값을 제한해주는 함수이다. value 값이 min 값보다 작으면 min 값으로, max 값보다 크면 max값으로 만든다. 사용되는 예를 보면 이해가 쉽게 된다. 게임에서 플레이어의 현재 체력은 0보다 낮아선 안되고 최대체력을 넘어서는 안될 것이다. 이것을 Clamp 함수를 통해 제한해줄 수 있다.0은 최솟값, 최대체력이 최댓값이 된다. 코드로 작성해보면CurrentHealth = Mathf.Clamp(CurrentHealth, 0, MaxHealth); 이런 식으로 간단하게 현재 체력을 제한해줄 수가 있는 것이다. 적에게 공격당해도 체력은 0 밑으로 떨어지지 않을 것이고 체력을 회복하더라도 최대 ..

C# 2024.05.27

5/1 TIL - Delegate, Func, Action, 람다

오늘도 마찬가지로 팀 프로젝트에 집중한 하루였지만 그중에서 알아야할 거 같은 내용을 기록하였다. Delegate델리게이트는 메서드를 참조하는 타입이라 생각하면 된다. 변수처럼 메서드를 저장할 수가 있게 된다. c++에선 함수 포인터라는 용어로 만나본 적이 있는 내용이다. 그냥 함수를 쓰면 되지 왜 델리게이트를 써야하냐면 팀프로젝트하다보면 접근이 힘든 상황이 생길 수도 있으니 메서드 여러 개를 연결해두고 쓰자는 취지다. 또한 UI면 UI부분만 다뤄야지 게임 진행의 로직까지 들어간다면 다소 복잡해질 수가 있다. delegate void MyDelegate(string message);static void Method1(string message){ Console.WriteLine("Method1: " ..

C# 2024.05.01

C# 인터페이스와 열거형

클래스서 다중 상속을 사용하지 않는 이유가 있다. A 클래스로 부터 B, C가 상속을 받고 D가 B, C를 상속받으면 다이아몬드 구조가 되어B, C가 동일한 A 클래스로부터 상속을 받았기에 둘이 같은 멤버, 메서드 중 뭔 골라야 할지 모호해지는 문제점이 존재한다. 또한 당연히 다중 상속을 하면 클래스 간의 계층 구조가 복잡해지며 일관성을 유지하기 위해 C#에서는 다중 상속은 지원하지 않는다. 인터페이스 클래스는 다중 상속이 안되지만 다중 상속을 지원하는 인터페이스가 있다.인터페이스는 클래스에게 "이렇게 구현을 해!" 라고 제시를 해주는 설계도일 뿐이고 실제 구현은 클래스에서 이루어진다. // 인터페이스 1public interface IItemPickable{ void PickUp();}// 인터페..

C# 2024.04.26

C# 고급 문법 및 기능

제네릭 코드를 하나만 짜놓고 다양한 자료형을 사용할 수 있게 해주어 재사용성을 높일 수 있음 의 키워드를 사용한다. 선언 시점이 아닌 사용시점에 자료형이 결정된다. 사용시에는 대신에 구체적인 자료형을 넣어줘야 한다. class Stack{ private T[] elements; private int top; public Stack() { elements = new T[100]; top = 0; } public void Push(T item) { elements[top++] = item; } public T Pop() { return elements[--top]; }}Stack i..

C# 2024.04.25

C# OOP와 클래스

객체 지향 프로그래밍(OOP)의 특징과 클래스와 객체에 대해 서술하는 시간을 가져볼 것이다. 객체지향 프로그래밍의 특징 캡슐화 관련된 데이터와 기능을 하나의 단위로 묶어 사용한다. 캡슐로 된 약을 생각해보자  두통약도 있고 해열제도 있고 진통제도 있을 것이다. 각자 해야할 역할(기능)에 따라 캡슐화했으며 캡슐을 부수지 않는 내용물을 볼 수가 없다. 캡슐화를 통해 정보를 은닉이 가능하고 외부에서의 직접적인 접근을 제한할 수 있는 것이며 만일 어떤 약에 문제가 생기면 각각의 것만 수정하면 되기에 각각의 안정성과 유지보수성을 높일 수 있다. 또한 기능 별로 묶여있기에 필요한 기능이 있다면 새롭게 구현하는 것이 아닌 포함만 하면 되는 것이다. 두통도 해열도 하고 싶으면 새롭게 만드..

C# 2024.04.24

C# 연산자와 문자열 처리

본론에 앞서 이 블로그는 어디까지나 본인의 학습을 위해 정리를 해두는 곳이라 이미 잘 알고 있는 정보는 가볍게 서술하고 헷갈리거나 잊어버리기 쉬운 개념일수록 빨간색에 가깝게 표시해뒀다. 연산자 산술연산자: 사칙연산과 같은 숫자를 대상으로 사용하는 연산자 ex) +, -관계연산자: 두 값을 비교하여 True, False 값을 반환 ex) >, 논리연산자: True 혹은 False 값을 대상으로 쓴다. ex) &&, ||, ! 이 세가지는 잘알고 있는 연산자지만 비트연산자는 생소할 수 있어 좀 더 자세히 다뤄본다. 비트연산자 비트연산자: 비트(bit) 단위로 연산을 수행하는 연산자 비트는 0과 1로 구성되어 있음, 다시 말해 2진수이다. 더보기2진수를 나타내는 리터럴은0..

C# 2024.04.23

C# 입출력과 각종 용어들

코드를 볼 때는 원리보다는 무슨 의도로 만들어졌을까에 집중하고 또한 많은 실패 경험은 도움이 된다는 스파르타코딩클럽의 튜터님의 조언으로 시작한다. using System 이는 System이라는 namespace 안의 기능을 사용하겠다는 의미이다. namespace는 클래스들의 묶음이자 기능들의 묶음으로 볼 수 있다. 출력 C#에선 콘솔에 출력을 담당하는 C++의 cout의 역할을 하는 것이 바로 Console.WriteLine이다. string name = "bugmin"; Console.WriteLine("Hello, {0}!", name); Console.Write($"Hello, {name}!"); Console.WriteLine은 메서드 오버로딩이 되어있어 문자열이 아닌 정수형, 실수형 변수를 넣..

C# 2024.04.22