본문 바로가기

C#/기본 문법

Action 델리게이트의 event 키워드 유무 얼마 전 옵서버 패턴을 설명하며 action 델리게이트의 옵서버 패턴으로써의 사용을 글로 남겼다, 그러던 도중 문득 action을 사용할 때 event를 쓸 때와 안 쓸 때가 있다는 사실을 깨달았고, 추가적인 검색을 한 뒤 학습한 정보를 이곳에 남기려고 한다. 간단하게 설명하자면 Event를 붙히고 action을 구현하면 외부에서 델리게이트 대입 (= 을 사용) 이 불가능해진다.이는 객체 지향 프로그래밍의 캡슐화와 밀접한 연관이 있으며 구독 (+= , -=)는 사용이 가능하지만 대입( = ) 은 사용 못 하게 함으로 구독자들을 보호하는 방식이고, Get/Set 접근 제어자와 같은 문법적 장치이다. 정리하면 아래와 같고특징Action 만 사용event Action 사용외부에서 델리게이트 대입(=) .. 더보기
C# 상속 시 클라스 확인 A를 상속받는 클라스 B가 존재할 때 만약 A클라스 내부에서 공통으로 사용중인 메서드에서 상속받는 클라스에 대한 정보를 접근하고 싶다면 어떻게 해야할까?  예를들어 Monster 클라스를 상속받는 Tiger 라는 클라스가 존재할 때 Monster에서 Tiger에 대한 정보를 접근하고 싶다면 일반적으로 다운캐스팅 등을 떠올릴 수 있다.Tiger tiger = (Tiger)monster; // 다운캐스팅 (상위 → 하위) 하지만 이와 같은 경우는 명시적 다운 캐스팅으로 예외를 발생시킬 가능성이 존재한다.이럴때 쓸 수 있는 방법에는 무엇이 있을까?   1. is 연산자 사용 (가장 일반적인 방법)if (this is Tiger){ Debug.Log("이 개체는 Tiger입니다!");} this가 Tig.. 더보기
C# Parsing Parsing(파싱) 은 문자열(string) 데이터를 특정 형식(숫자, 날짜, 객체 등)으로 변환하는 작업을 의미한다.예를 들어, "123"이라는 문자열을 정수(int)로 변환하는 게 대표적인 파싱으로 이와 같은 문자열 데이터를 숫자 타입 등으로 변환해야 하는 상황이 자주 있기 때문에 빈번하게 쓰이는 메서드이다. ✅ C#에서 자주 쓰는 Parsing 방법 1. Parse() 사용 (예외 발생 가능)문자열을 특정 데이터 타입으로 변환변환이 실패하면 예외(Exception)를 발생시킴string numberStr = "123";int number = int.Parse(numberStr); // 123Console.WriteLine(number + 10); // 133 주의할 점: numberStr가 숫.. 더보기
C# Object Object는 C#의 모든 클래스와 타입이 궁극적으로 상속받는 최상위 기본 클래스로 int, string, List , Dictionary 같은 모든 타입이 Object에서 상속된다.  기본적으로 ToString(), Equal(), GetType() 등의 메서드가 제공되며 다형성 활용이 주목적이며다형성 활용하면 떠오르는 방식인  제네릭과는 큰 틀에서는 비슷한 성향을 보이지만 일부 차이점이 존재하며 상황에 맞도록 둘을 구분하여 사용해야 한다.Object와 비교하면 제네릭이 대부분의 상황에서 효율적이지만 다음 설명할 차이점에 따라 Object를 사용해야 하는 경우도 존재한다.     ✅ 제네릭과 object를 언제 써야 할까?  상황 T(제네릭)을 사용해야 하는 경우 object를 사용해야 하는 경.. 더보기
C# HashSet<T> (자료구조) HashSet 은 중복을 허용하지 않는 집합(콜랙션)을 구현한 자료구조이다.또한 내부적으로 해시 테이블 (Hash Table)을 사용하여, 빠른 검색, 추가, 삭제를 제공한다. ✅ HashSet 기본 사용법class Program{ static void Main() { HashSet numbers = new HashSet(); numbers.Add(10); numbers.Add(20); numbers.Add(30); numbers.Add(10); // 중복 값 -> 추가되지 않음 Console.WriteLine("HashSet 요소:"); foreach (var num in numbers) .. 더보기
C# Stack (자료구조) Stack은 C#을 포함한 많은 언어에서 사용되는 데이터를 관리하는 자료구조로, LIFO (Last In, First Out) 의 후입선출 방식으로 작동한다. 이는 마지막으로 들어간 항목이 가장 먼저 배출된다는 뜻으로 이러한 특성 때문에 여러가지 활용처가 존재한다. 맴버 함수 먼저 Stack을 사용하려면 System.Collections.Generic 네임 스페이스를 통해서 Stack클라스를 구현가능하며 구현에 있어서 직관적인 구조를 하고있어 사용이 편리하다.Stack의 맴버 함수에는 대표적으로 Push(), Pop(), Peek() 가 존재하며 이는 각각 아래와 같다.static void Main() { // 정수를 저장하는 스택을 생성 Stack stack = new S.. 더보기
C# Nullable 오늘은  Nullable에 대해서 간단하게 알아보려고 한다.  Null이란 일반적으로 비어있음 을 표현하는 것으로 비어있는 참조를 접근할 때 NullReferenceException 등이 뜨는 것으로 익숙한 그것이며, 일반적으로 참조 타입 (string, class) 등에만 사용할 수 있다. 우리의 C#은 Nullability라는 것으로 값 타입 형식의 (int,float,bool..) 등이 가질 수 없는 null값을 가질 수 있게 해 주며, 아래와 같은 방식을 통해 null값을 가질 수 있게 가능하다.// null을 허용하지 않는 일반적인 참조타입string notNullable = "Hello World!";// 명시적 nullablestring? nullable = null;  이러한 Nullabl.. 더보기
(C#) 람다식 + (무명 메소드) 람다식은 델리게이트의 추가적인 활용 방식으로 무명 메소드 라는 것을 먼저 확인하고 가야 한다. 위에서 처럼 delegate(파라미터)를 이용하면 이름이 없는 메소드를 즉석 해서 할당 가능한데 이를 무명 메소드라고 부르며 람다식은 기본적으로 무명 메소드와 개념은 같지만 조금 더 간단하게 delegate를 입력해 줄 필요 없이, (파라미터) => return값 을 사용하면 코드의 길이를 줄여서 활용할 수 있다. 델리게이트를 사용할 때 더 코드를 간결하게 작성할 수 있도록 도와주는 기능. 더보기