STUDY/C#(22)
-
[C#] 기본 인터페이스 메서드, 이제 interface도 인스턴스화를?
interface는 인스턴스는 못 만들지만 참조는 만들 수 있다? 위 글을 읽고 이어서 보면 더 좋습니다 C# 8.0부터 인터페이스에도 기본 구현을 넣을 수 있게 되었다. https://learn.microsoft.com/ko-kr/dotnet/csharp/advanced-topics/interface-implementation/default-interface-methods-versionspublic interface IDamageable{ int Health { get; } void TakeDamage(int amount); // C# 8.0+: 기본 구현 제공 가능 bool IsDead => Health 그럼 이제 인스턴스화 가능한가? 라고 한다면 여전히 불가능하다. He..
2026.04.19 -
[C#] 타입(형)변환, 캐스팅
형 변환 퀴즈에서 헷갈려서 정리를 해보려고 한다.class B{}class D : B {}위와 같이 두개의 클래스가 정의되어 있다고 가정해보자.아래의 표를 채워볼건데, 각각의 코드에 대하여 어떤 코드가 컴파일되고 성공적으로 수행될 것인지(OK), 어떤 코드가 컴파일 시점에 오류(CTE에 체크), 또 어떤 코드가 런타임에 오류(RTE에 체크)를 발생시키는지 채워보자. 정답은 맨 아래에 적어놨다.위 표는 책 CLR via C#에 나와있는 표이다. StatementOKCTERTEObject o1 = new Object(); Object o2 = new B(); Object o3 = new D(); Object o4 = o3; B b1 = new B(); B b2 = new D(); D d..
2026.04.12 -
IL 코드 명령어들
힙 객체(참조 타입 인스턴스)의 맴버 변수접근ldfld(load field) / stfld(storefield) -> 객체의 인스턴스 필드를 읽거나 쓸때 사용 로컬 변수를 읽고 쓸 때예제 코드// 인스턴스 메서드라고 가정 (this 사용 예시를 위해)class Sample{ void Demo(ref int a, int b) { int x = a + b; // 로컬 x x = x + 5; // 로컬 x 갱신 a = x; // ref 인자 a에 값 써넣기 System.Console.WriteLine(x); }}IL 코드.method private hidebysig instance void Demo(int32& ..
2025.09.07 -
[C#] 클로저(closure)
클로저의 개념일반적으로 지역변수는 함수가 끝나면 스택에서 사라진다. 하지만 람다식(익명 메서드)과 같은 함수는 단순히 '코드 조각'이 아니라 외부 변수를 캡쳐해서 함께 저장하는 객체를 만든다. 즉 컴파일러가 람다용으로 힙에 별도의 참조형 객체를 만들어 그 안에 저장한다.이렇듯, 함수(람다, 익명 메서드)가 자기 외부의 지역 변수를 캡처해서, 함수 실행이 끝난 뒤에도 그 변수를 계속 참조할 수 있게 하는 기능을 클로저(Closure)라고 한다.예시void Example(){ var isInit = false; Action callback = uid => { if (isInit) Console.WriteLine("다시 호출됨"); else ..
2025.09.07 -
공용 언어 런타임(CLR)의 실행 모델
해당 내용은 서적 CLR via C# 을 기반으로 작성하였습니다. 들어가기 앞서,우리는 여러가지 어플리케이션을 개발할때 개발 목적에 따라 언어를 선택하게 된다. C++과 같은 언어는 Win32 API를 자유로이 쓸 수 있고 메모리로 직접 접근이 가능하여 우리가 원하는 아주 섬세한 부분까지 제어할 수 있기 때문에, 시스템 서비스와 같은 하위 수준의 어플리케이션을 개발할때 적합하고, Visual Basic과 같은 언어는 쉬운 문법, 빠른 UI 디자인 작업 등이 용이하여 고객의 요구 사항이 빈번하게 바뀌는 업무 프로젝트를 진행하기에 아주 적당하다고 할 수 있다. 즉, 기존의 언어 사이에는 우열이 존재하며, 개발 목적에 따라 언어의 선택이 이루어질 수 있고, 이러한 결정은 매우 신중하게 이루어져야 한다. 그러나..
2025.02.02 -
[C#] async, await
이글은 서적 '이것이 C#이다'를 기반하여 각종 블로그에서 추가적인 정보를 토대로 작성된 글입니다. 같이 보면 좋은글비동기 개념 [async와 await의 개념] C#의 async와 await 키워드는 비동기 프로그래밍을 쉽게 구현할 수 있도록 도와주는 핵심적인 도구이다. 이를 통해 코드가 실행되는 동안 작업을블록하지 않으면서도 동기식 코드처럼 간결하고 이해하기 쉬운 형태로 작성할 수 있다.async메서드가 비동기적으로 실행된다는 것을 나타낸다.async를 붙인 메서드는 반드시 반환값으로 Task, Task, 또는 void를 사용해야 한다.void를 사용하게 되면 비동기 메서드를 호출하는 쪽에서 비동기 제어할 수 없다. 종종 이벤트 핸들러로 사용할 때 void를 사용하곤 하는데 UI버튼을 클릭하면 일어..
2024.12.04