본문 바로가기

C#17

C# Action delegate 완벽 가이드: 콜백 함수(callback)와 이벤트 핸들링(event handling) 활용 C#의 Action 대리자는 코드에서 메서드를 캡처하여 나중에 호출할 수 있는 강력한 도구입니다. 이 글에서는 Action의 개념, 사용 방법, 주요 활용 예시를 다루며, Func 대리자와의 차이점, Action을 사용할 때의 이점과 주의사항을 포함하겠습니다.1. Action이란?Action은 .NET 프레임워크의 내장 대리자(delegate) 타입 중 하나입니다. Action 대리자는 반환값이 없는 메서드를 캡처할 때 사용되며, 최대 16개의 입력 매개변수를 받을 수 있습니다.기본적으로 Action 대리자는 void를 반환하는 메서드를 참조할 수 있으며, Func와 달리 반환값을 기대하지 않습니다.기본 문법public delegate void Action();T1, T2 등은 입력 매개변수의 타입을 나.. 2024. 11. 1.
C# 제네릭 제약 조건: 타입 안전성과 코드 재사용성 향상하기 제네릭(Generic)은 C#에서 매우 강력한 기능으로, 타입에 의존하지 않고 재사용 가능한 코드를 작성할 수 있도록 해줍니다. 그러나 모든 타입에서 동작하지 않을 수 있는 상황에서는 제네릭에 제약 조건을 추가하여 특정 타입이나 행동을 요구할 수 있습니다. 제네릭 제약 조건을 통해, 제네릭 클래스나 메서드가 보다 안전하고 예측 가능하게 작동하도록 강제할 수 있습니다.제네릭 제약 조건의 필요성제네릭은 타입을 매개변수로 받아 여러 다른 타입을 처리할 수 있게 해줍니다. 그러나 제네릭을 사용하는 모든 경우에 임의의 타입을 허용하는 것이 적절하지 않을 수 있습니다. 예를 들어, 특정 클래스 상속 관계를 요구하거나 인터페이스 구현을 요구하는 경우가 있을 수 있습니다. 이때 제네릭 제약 조건을 사용하면 개발자가 명.. 2024. 10. 10.
Boxing과 Unboxing: 성능 관점에서 Boxing과 Unboxing은 프로그래밍에서 자주 발생하는 개념이지만, 이들이 성능에 미치는 영향을 이해하는 것은 매우 중요합니다. 특히 성능에 민감한 시스템이나 대용량 데이터를 처리하는 애플리케이션에서 자주 발생하는 문제점입니다. 이번 글에서는 boxing과 unboxing이 성능에 어떤 영향을 미치는지에 대해 상세하게 설명하고, 이를 줄이기 위한 방법들을 함께 살펴보겠습니다.1. 기본 개념Boxing이란?Boxing은 기본형 타입(primitive type) 데이터를 참조형 타입(reference type)으로 변환하는 과정입니다. Java나 C# 같은 언어에서 기본형은 메모리 효율성과 속도를 위해 값 타입으로 처리되지만, 참조형은 객체로 관리되기 때문에 더 많은 메모리와 CPU 자원이 소모됩니다... 2024. 10. 1.
C#에서 `async`/`await` 자세히 알아보기 C#에서 비동기 프로그래밍은 현대 애플리케이션에서 필수적인 기술입니다. 웹 서비스, 데이터베이스 연결, 파일 I/O와 같이 시간이 많이 소요되는 작업을 효율적으로 처리하기 위해 비동기 프로그래밍을 사용합니다. 이 글에서는 C#의 async와 await 키워드를 중심으로 비동기 프로그래밍의 원리, 기본 사용법, 예제, 그리고 다른 비동기 처리 기법과의 차이점 등을 자세히 설명하겠습니다.목차비동기 프로그래밍이란?async/await의 기본 개념C#에서의 Task와 Taskasync/await 예제async/await의 실행 원리다른 비동기 기법들과의 차이점주의 사항 및 한계결론1. 비동기 프로그래밍이란?비동기 프로그래밍은 시간이 많이 걸리는 작업이 완료될 때까지 애플리케이션의 다른 부분이 계속해서 실행될 수.. 2024. 8. 26.
[C#] Access 2003과 연동(3) 이제 실제로 어떻게 코딩하는지 알아 보도록 하자 일단 연결을 해야 한다. 연결을 시작하는 부분 연결을 끝는 부분 간단한 쿼리를 만들어 보았다. 이렇게 하면 된다. 아주 쉽지???별거 아니다 간단한 쿼리들은 더 올리고 싶지만 나중에 수정하도록 하겠다. 2014. 6. 24.
[C#] Access 2003과 연동(2) 전 글에서 만들었던 녀석을 갖고 이제 Visual에 등록을 해보도록 하겠다. 기본적으로 만들어 둔 Access 2003 .mdb 파일이 어디 있는 지 알아 두어야 한다. 기본적으로 만들면 내문서에 들어 가는 것 같다. 그러니 어디 있는지 모르는 사람들은 내문서에 들어가서 확인 해보도록 하자 . 이제 시작 해보도록 하겠다. 일단 Visual을 열도록 하자 보통은 윈도우 기반에서 사용하는 사람이 많다 보니 나도 WinForm에서 하도록 할 것이다. 1) Visual Studio를 켜서 C# WinForm을 만들도록 하자 WinForm으로 만들면 기본적으로 이런 화면이 나오게 된다. 이제 슬슬 만들어둔 녀석과 합칠 것이다. 2) 위에 메뉴에 보면 데이터라는 메뉴가 있다. 클릭하면 "새 데이터 소스 추가"가 보.. 2014. 6. 24.
[C#] Access 2003과 연동(1) 요즘 프로그램을 만들때 데이터베이스가 없는 것은 없다. 그래서 간단하게 Access와 연도하는 것을 만들어 보도록 하려 한다. 내가 연동을 하기 위해서 사용하는 녀석은 Microsoft Visual Studio 2008이다. 사용언어는 C#이다. 그리고 Access 2003을 사용할 것이다. 우선 Access 2003에서 간단한 파일을 만든다. 설명이 잘보이기 위해서 빨간 글씨를 사용하도록 하겠다. 1) Microsoft Access를 더블클릭하면 기본 화면이 나온다. 2) 오른쪽을 보면 새로 만들기 밑에 새 데이터베이스 만들기를 누른다. 이 녀식을 누르게 되면 새로운 데이터베이스 파일을 만드는 과정이 시작된다. 빨간 색으로 박스 한곳에 자신이 원하는 파일 이름을 작성해서 넣으면 된다. 나는 그냥 만들기.. 2014. 6. 24.
[C#] Nullable 사용법 Nullable 처음 들어본 사람도 있을 것이다. 하지만 현업에서 DB 중심적 프로그래밍을 하다보면 꼭 마주하는 녀석일 것이다. 왜냐혀면 참조형식에는 Null이라는 녀석이 있는데 C#의 값형식에는 Null이 없기 때문이다. Nullable 형식은 System.Nullable 구조체의 인스턴스이다. Nullable 형식은 값 형식의 올바른 값 범위뿐 아니라 null 값도 나타낼 수 있도록 한다.예를 들어 Nullable에는 -2147483648에서 2147483647까지의 모든 값을 할당하거나 null 값을 할당할 수 있다.숫자 및 부울 형식에 null 값을 할당할 수 있는 기능은 특히 값이 할당되지 않을 수 있는 데이터베이스 및 기타 데이터 형식을 다룰 때 유용하다.Colored By Color Scri.. 2014. 6. 19.
[C#] 명시적 인터페이스(Interface) 구현 C++을 해본사람은 다중상속에 대해 알고 있을 것이다. 그런데 다중상속은 많은 문제점을 갖고 있다. 그래서 C#에서는 다중상속 자체를 문법적으로 제한하면서 Interface라는 높은 차원의 추상화 클래스를 만들었다. 여기서 이야기 하고 싶은것은 Interface의 사용법이다.예를 들어 이런 상황이 있다고 가정해보자. Colored By Color Scripter™123456789101112131415161718using System; public class Program{ public static void Main(){ SampleClass sc = new SampleClass(); sc.PrintMessagebox(); sc.PrintForm(); }} public class SampleClass{ p.. 2014. 6. 17.
[C#] Cross Thread로인한 InvalidOperationException해결법 C# Windows Forms 응용 프로그램을 만들다 보면 작업시간이 오래 걸려 프로그램이 응답없음에 빠지는 경우가 있다. 그래서 C# Windows Forms에서는 성능 향상을 위해 다중 스레딩을 사용하곤한다. 그런데 다중 스레드를 사용하다가 Thread가 종료 되는 시점에서 Main Thread에 있는 Control을 제어해야 할 경우가 있다. 이경우 InvalidOperationException라는 Exception이 발생하곤한다. 이유는 정책 때문이다. 기본적으로 Control은 Main Thread에서만 제어를 해야 한다. 경합 상태, 교착 상태 등의 다른 스레드 관련 버그가 발생할 수 있기 때문이다. 따라서 Control에 대한 액세스가 스레드로부터 안전한 방식으로 호출되거나 Main Thre.. 2014. 6. 16.
[C#] 람다 표현식 도대체 람다가 뭘까????MSDN 왈 람다 식은 대리자 또는 트리 표현 형식을 만드는 데 사용할 수 있는 익명 함수입니다.람다 식을 사용하여 인수로 전달되거나 함수 호출 값으로 반환되는 로컬 함수를 쓸 수 있습니다.요따위로 적어 놨다. 뭐 대충 이해가 가는 사람도 있고 없는 사람도 있겠지만 그냥 익명 함수라고 알아두면 아주 편하게 사용할 수 있지 않을까 싶다. 우선 간단하게 사용법을 알아보자. Colored By Color Scripter™123456delegate int del(int i);static void Main(string[] args){ del myDelegate = x => x * x; int j = myDelegate(5); //j = 25}보통 이렇게 쓴다. 아주!!!! 쉽다. dele.. 2014. 6. 16.
[C#] 내부 클래스 오늘 알아볼 것은 내부 클래이다. 내부클래스??? 생소할 수도 있을것 같다. 하지만 잘 생각해보면 유용하게 사용 될 수 있는 여지가 충분히 있는 문법이다. 예를 들어 이런 클래스가 있다고 해보자. Colored By Color Scripter™123456789101112131415161718using System; public class OutClass{ #region IoutClass 멤버 void DoSomeThing(){ Console.WriteLine("OutClass DoSomeThing Method!"); } #endregion IOutClass 멤버 public static void Main(){ OutClass outClass = new OutClass(); outClass.DoSomeTh.. 2014. 6. 16.
[C#] 소멸자 Finalize 오늘 알아볼 녀석은 소멸자이다. C++을 사용해본 사람들은 소멸자를 잘 알것이다. 메모리 관련해서 아주 중요한 영역이기 때문이다. 그런데 C#을 사용하는 사람들은 소멸자에 별로 관심이 없다. 가비지 컬랙션이 있기 때문에 보통은 객체가 어떻게 되는지도 모르고 그냥 넘어가는 경우가 다반사이다. 일반적으로 C#에는 가비지 컬랙터 기능이 있는 런타임을 대상으로 하지 않는 언어이기 때문에 개발시 메모리 관리가 필요하지 않다. 왜냐하면 .NET Framework 가비지 컬랙터에서 객체에 대한 메모리 할당과 해제를 암시적으로 관리하기 때문이다. 그러나 창, 파일 및 네트워크 연결처럼 관리되지 않는 리소스를 응용 프로그램에서 캡슐화할 경우, 소멸자를 사용하여 이 리소스를 해제해야 한다. 객체가 소멸 대상이 되면 가비지.. 2014. 6. 13.
[C#] Delegate 사용법 오늘 알아볼 녀석을 Delegate이다. 입문자의 경우는 Delegate를 사용에 대해 의문의 갖는다. 아주 많이...하지만 C#에서 자랑하는 기능이니, 알아두고 유용하게 쓸만한 곳을 찾아보는 것도 좋겠다. Delegate는 특정 매개 변수 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식이다.Delegate를 인스턴스화하면 메개 변수 및 반환 형식이 같은 모든 메서드 형식에 연결할 수 있고,인스턴스를 통해 메서드를 호출할 수 있다.Delegate 속성1. Delegate는 C++의 함수 포인터와 유사하지만 안전하다.2. Delegate를 통해 메서드를 매개 변수로 전달할 수 있다.3. Delegate를 사용하여 콜백 메서드를 정의할 수 있다.4. 여러 Delegate를 연결할 수 있다.5. 메서.. 2014. 6. 12.
[C#]명령 프롬프트에서 컴파일 하기 CSC.exe 알아두면 좋을 법한 컴파일 방법이 있어. 소개하고 싶어 포스팅을 한다. 필자는 주로 IDE(Visual Studio xxxx)류의 통합환경을 사용했다. 그런데 ASP.NET을 하면서 부터 Text Edit Tool을 더 많이 사용하게 되는거 같다. 그러다보니 궁굼해졌다. Text Edit는 도대체 어떻게 컴파일을 하고 디버깅을 하는지....그런데 역시 MS형님들 짱이다. CSC.exe라는 녀석이 존제 한다고 한다. 오늘 포스팅 내용의 주는 "CSC.exe"이다. 우선 csc.exe가 무엇이냐? C# 컴파일러이다. 뭔가 싱겁지만 항상 IDE만 사용하시던 분들은 조금 어색할 것 같다. 간단하게 exe파일(실행파일)과 DLL파일을 만드는 법을 소개 하고자 한다. ※ exe 파일 만들기 우선 간단한 소스를 작성.. 2014. 6. 11.