묻공러
'C#/[루키스] 실전 문법' 카테고리의 글 목록

C#/[루키스] 실전 문법

C#/[루키스] 실전 문법

[C# 섹션 8] Nullable

# Nullable 왜 필요한가?값을 찾지 못한 경우에 '값이 없다'라는 상태를 표현해야 한다참조타입인 클래스는 null을 작성하면 되고bool도 false를 작성하면 되어서 직관적이다 그러나,값 타입(ex. int)은 null을 사용할 수 없다그렇기에 억지로 '사용하지 않는 특별한 값'을임의 설정해서 사용하기에 다소 아쉬움이 존재한다int FindIndex(){ // 못 찾으면 -1 반환 return -1;} # Nullable 사용법C#에서 값 타입도 null을 가질 수 있도록 Nullable 기능을 제공한다타입 뒤에 '?'를 붙여주면, null을 넣을 수 있다int? number = null; nullable 타입은 null만 올 수 있는 것이 아니다null이 올 수도 있고, 값이 들어올..

C#/[루키스] 실전 문법

[C# 섹션 8] Reflection

# reflectionc#에서 만들어지는 모든 클래스는최상위 타입인 object를 암묵적으로 상속받는다그래서 GetType, GetHashCode, Equals 등의 메서드를 사용할 수 있다 특히, GetType을 통해필드 정보(멤버변수, 멤버함수)를 모두 확인 및 추출이 가능하다이처럼 클래스에 대한 모든 정보들을 런타임에 확인이 가능한 것이 reflection이다C++ 에는 이러한 기능이 없다using System;using System.Reflection;using System.Security.Cryptography;namespace CSharp{ class Monster { public int hp; protected int attack; ..

C#/[루키스] 실전 문법

[C# 섹션 8] Exception

# Exception특정 부분에서 예외가 발생하는지 확인하고예외가 발생한 경우에 특정 기능을 실행시키기 위해서 주로 사용된다 예외가 발생하는 대표적인 경우는0으로 나누기, 잘못된 메모리 참조(null), 오버플로우 등이 있다 try문을 통해 예외 발생 여부를 확인하고catch문을 통해 예외가 발생한 경우의 조치를 구현할 수 있다namespace CSharp{ internal class Program { static void Main(string[] args) { try { int a = 8; int b = 0; int result = a / b; ..

C#/[루키스] 실전 문법

[C# 섹션 8] Lambda

# Lambda 개념일회용 함수를 만드는 문법이다 # Lambda 왜 필요한가?- 일반적인 하드코딩 방법아래의 코드를 보면, Find 함수를 종류별로 다 만들어주며매우 비효율적이다using System;namespace CSharp{ enum ItemType { Weapon, Armor, Amulet, Ring, } enum Rarity { Normal, Uncommon, Rare, } class Item { public ItemType ItemType; public Rarity Rarity; } internal class P..

C#/[루키스] 실전 문법

[C# 섹션 8] Event

# delegate 문제점delegate는 치명적인 단점이 있다외부에서 언제든지 누구나 호출이 가능하다는 것이다 아래의 예시를 보면,InputManager의 delegate 객체인 InputKey를외부에서 아무나 호출이 가능하다는 것이다// InputManagernamespace CSharp{ class InputManager { public delegate void OnInputKey(); public OnInputKey InputKey; public void Update() { if (Console.KeyAvailable == false) return; ConsoleKeyIn..

C#/[루키스] 실전 문법

[C# 섹션 8] Delegate

# delegate의 필요성C#의 delegate는 C++의 함수포인터와 같은 개념이다아래를 통해 왜 필요한지 알아보자 예를 들어서 버튼이 눌리는 경우, 특정 작업을 구현하고 싶다고 가정하자그렇다면 ButtonPressed 같은 함수 내부에 원하는 작업을 작성하면 된다static void ButtonPressed(){ // 기존 코드 // 어쩌고 저쩌고 기능 추가} 그러나 위의 코드는 복잡성을 증가시키고또한, 사실상 게임 엔진에서는 저런 함수 자체만을 제공하는 것이고함수 내부를 수정하지는 못하도록 해두었다 그래서 아래와 같이사실상 ButtonPressed의 함수의 인자로우리가 원하는 함수자체를 인자로 넘겨주고 싶은 것이 핵심이다static void ButtonPressed(// 함수를 인자로 넘겨..

C#/[루키스] 실전 문법

[C# 섹션 8] Property

# property 개념 및 사용법property는 멤버 변수의 get, set 함수를 직접 만드는 과정을편하게 해주는 기능으로 사용법은 아래와 같다protected int hp; // 변수public int Hp // getter, setter{ get { return hp; } set { this.hp = value }} get set 중에서 둘 중 하나만 작성해서 하나를 막을 수도 있고private을 붙여 외부에서만 사용제한도 가능하다 # 자동 구현 property멤버 변수의 get, set 함수 내부에서기본 기능(단순히 get, set)만 하는 경우에는아래와 같이 자동 구현 propety를 활용하면 된다public int Hp { get; set; } // 변수 생성 자동 + getter, se..

C#/[루키스] 실전 문법

[C# 섹션 8] Interface

# abstract 필요 예시C++에서 추상클래스를 사용해야 하는 예시와 동일하다 C#에서 부모 클래스를 상속받은 자식 클래스에서부모 클래스의 virtual 함수를override를 하지 않거나 (부모 클래스 함수를 그대로 사용하고 싶은 경우)override 하여 사용하는 것이 일반적이다 (부모 클래스 함수와는 다른 구현부의 함수를 사용하고 싶은 경우)하지만 만약,부모 클래스는 함수의 "이름"만 정의하고,구현은 자식 클래스에서만 가능하도록 강제하고 싶다면abstract 키워드를 사용하면 된다 abstract 키워드가 함수에 붙으면,해당 함수는 추상함수가 되고해당 함수가 포함된 클래스 전체가 추상클래스가 돼버린다따라서,부모 클래스는 해당 함수의 구현(내용)을 가질 수 없으며,자식 클래스는 반드시 overri..