본문 바로가기
반응형

Programming/C#43

멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법 멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법예제 코드 소개아래의 예제 코드는 두 개의 스레드가 각각 x와 y 변수를 설정하고, 다른 변수인 r1과 r2에 값을 할당하는 방식으로 동작합니다. 코드를 여러 번 실행해 보면, r1과 r2 값이 동시에 0이 되는 경우가 발생할 수 있습니다.class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread_1() { y = 1; r1 = x; } static void Thread_2(.. 2024. 7. 1.
C# 다차원 배열 순회 행 우선 순회와 열 우선 순회의 성능 차이 C# 다차원 배열 순회 행 우선 순회와 열 우선 순회의 성능 차이예제 코드 소개먼저, 예제 코드를 살펴보겠습니다. 이 코드는 10,000 x 10,000 크기의 2차원 배열을 두 가지 순서로 설정하면서 걸리는 시간을 측정합니다.class Program { static void Main(string[] args) { int[,] arr = new int[10000, 10000]; { long now = DateTime.Now.Ticks; for (int y = 0; y 결과 분석위 코드를 실행하면 (y, x) 순서로 배열을 설정하는 것이 (x, y) 순서로 설정하는 것보다 더 빠르게 .. 2024. 7. 1.
Visual Studio 닷넷 global using 자동 추가되는 기능 끄기 Visual Studio 닷넷 global using 자동 추가되는 기능 끄기 프로젝트를 만들고 작업을 하다보니 using이 자동으로 추가되는 모습을 보았다.이것이 편리하긴 하지만 학습자의 입장에서 자동으로 추가되는 것은 볼 수 없다. 해당 파일은 솔루션 탐색기에서 모든 파일 보기를 설정하면 GlobalUsings.g.cs를 찾을 수 있다.   이 기능을 끄는 방법은 프로젝트 파일을 더블 클릭하여 설정 파일을 열어 ImplicitUsings 기능을 disable로 만들어준다.  사라진다. 2024. 7. 1.
C# 스레드 동기화 문제 해결하기 디버그 모드와 릴리즈 모드에서의 차이점 C# 스레드 동기화 문제 해결하기 디버그 모드와 릴리즈 모드에서의 차이점문제 설명다음은 문제의 예제 코드입니다. 디버그 모드에서는 정상적으로 종료되지만, 릴리즈 모드에서는 스레드가 종료되지 않는 문제가 발생합니다.class Program { static bool _stop = false; static void ThreadMain() { Console.WriteLine("쓰레드 시작!"); while (_stop == false) { // 누군가가 stop 해주기를 기다린다. } Console.WriteLine("쓰레드 종료!"); .. 2024. 7. 1.
C# 변수 선언 방법: 지역 변수, 멤버 변수, 전역 변수 완벽 가이드 C# 변수 선언 방법: 지역 변수, 멤버 변수, 전역 변수 완벽 가이드C# 변수 선언 이해하기C#에서 변수를 선언할 때 변수의 범위(scope)와 수명(lifetime)을 이해하는 것은 매우 중요합니다. 변수는 위치에 따라 지역 변수, 멤버 변수, 전역 변수로 구분되며, 각각의 특성과 사용 방법이 다릅니다.지역 변수(Local Variable)지역 변수는 메서드나 블록 내에서 선언되며, 해당 메서드나 블록이 실행될 때 생성되고, 실행이 끝나면 소멸됩니다. 지역 변수는 메서드 내에서만 접근할 수 있으며, 메서드 외부에서는 접근할 수 없습니다.지역 변수 선언 예제public class Program{ public void SampleMethod() { int localVariable .. 2024. 6. 15.
C# object 클래스 상속 구조 모든 타입의 시작점 [C#] object 클래스 상속 구조: 모든 타입의 시작점안녕하세요! 이번 포스트에서는 C#의 모든 타입이 상속받는 기본 클래스인 object 클래스에 대해 알아보겠습니다. C#에서 모든 타입의 기본 클래스는 object 클래스입니다. 이는 C#의 모든 타입이 object를 상속받는다는 것을 의미하며, object 클래스는 .NET 타입 시스템의 최상위에 위치합니다. object 클래스의 상속 구조, 주요 멤버들, 그리고 object 클래스에서 제공하는 기본 메서드들에 대해 자세히 알아보겠습니다.object 클래스란?C#에서 object 클래스는 모든 클래스, 구조체, 열거형, 델리게이트 등이 상속받는 기본 클래스입니다. 즉, C#의 모든 타입은 object에서 파생됩니다. 이는 모든 타입이 공통적으로.. 2024. 6. 10.
C# 가비지 콜렉터(Garbage Collector) 메모리 관리의 핵심 [C#] 가비지 콜렉터(Garbage Collector): 메모리 관리의 핵심안녕하세요! 이번 포스트에서는 C#의 가비지 콜렉터(Garbage Collector, GC)에 대해 알아보겠습니다. C#에서 메모리 관리는 가비지 콜렉터(Garbage Collector, GC)에 의해 자동으로 수행됩니다. 가비지 콜렉터는 프로그램이 사용하지 않는 메모리를 자동으로 해제하여 메모리 누수를 방지하고, 효율적인 메모리 사용을 돕는 중요한 기능입니다. 이번 포스트에서는 가비지 콜렉터의 기본 개념, 동작 방식, 그리고 메모리 관리 최적화 방법에 대해 알아보겠습니다.가비지 콜렉터(Garbage Collector)란?가비지 콜렉터는 .NET 런타임 환경에서 메모리 관리를 자동으로 수행하는 구성 요소입니다. GC는 동적으로 .. 2024. 6. 10.
C# 박싱(Boxing)과 언박싱(Unboxing) 값 형식과 참조 형식의 변환 [C#] 박싱(Boxing)과 언박싱(Unboxing): 값 형식과 참조 형식의 변환안녕하세요! 이번 포스트에서는 C#의 중요한 개념인 박싱(Boxing)과 언박싱(Unboxing)에 대해 알아보겠습니다. 박싱과 언박싱은 값 형식(Value Type)과 참조 형식(Reference Type) 간의 변환을 설명하는 개념으로, 메모리 관리와 성능 최적화에 큰 영향을 미칩니다.박싱(Boxing)이란?박싱(Boxing)은 값 형식을 참조 형식으로 변환하는 과정입니다. 이 과정에서 값 형식의 값은 힙(Heap) 메모리에 저장되고, 그 참조가 스택(Stack) 메모리에 저장됩니다.박싱의 동작 방식int value = 123; // 값 형식object obj = value; // 박싱위 예제에서 value는.. 2024. 6. 10.
C# 예외 처리 안전한 프로그램을 위한 필수 기술 [C#] 예외 처리 : 안전한 프로그램을 위한 필수 기술안녕하세요! 이번 포스트에서는 C#의 예외 처리(Exception Handling)에 대해 알아보겠습니다. 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 관리하고, 프로그램이 비정상적으로 종료되지 않도록 하는 중요한 기법입니다.예외(Exception)란 무엇인가요?예외(Exception)는 프로그램 실행 중에 발생하는 예기치 않은 상황이나 오류를 말합니다. 예외가 발생하면 프로그램의 정상적인 흐름이 중단될 수 있습니다. 예를 들어, 파일을 열 수 없거나, 배열의 인덱스가 범위를 벗어나는 경우 등이 예외 상황에 해당합니다.예외 처리의 기본 구조C#에서 예외 처리는 try, catch, finally 키워드를 사용하여 구현됩니다.try 블록: 예.. 2024. 6. 10.
C# LINQ 데이터 쿼리의 일관된 방식 [C#] LINQ: 데이터 쿼리의 일관된 방식안녕하세요! 이번 포스트에서는 C#의 LINQ(Language Integrated Query)에 대해 알아보겠습니다. LINQ는 C#에서 데이터 소스에 대한 쿼리를 일관된 방식으로 작성할 수 있게 해주는 강력한 기능입니다.LINQ란 무엇인가요?LINQ는 .NET 언어에서 데이터 쿼리를 통합하는 방법을 제공하는 기능입니다. LINQ를 사용하면 SQL과 유사한 구문을 사용하여 배열, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 쿼리를 작성할 수 있습니다.LINQ의 기본 개념LINQ는 다음과 같은 구성 요소를 포함합니다:LINQ to Objects: 배열, 리스트와 같은 메모리 내 컬렉션을 쿼리할 때 사용됩니다.LINQ to XML: XML 데이터를 쿼리.. 2024. 6. 9.
C# 델리게이트(Delegate)의 다양한 사용법 [C#] 델리게이트(Delegate)의 다양한 사용법안녕하세요! 이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 다양한 사용법을 중심으로 알아보겠습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드, 비동기 프로그래밍 등 다양한 시나리오에서 활용됩니다.델리게이트의 기본 개념델리게이트는 메서드의 참조를 캡슐화하는 형식입니다. 델리게이트를 사용하면 메서드를 다른 메서드에 전달하거나, 런타임에 메서드를 동적으로 변경할 수 있습니다.델리게이트 선언public delegate void MyDelegate(int x, int y);​위 예시에서 MyDelegate는 두 개의 int 매개변수를 가지며 void를 반환하는 메서드를 참조할 수 있는 델리게이트입니다.델리게이트의 .. 2024. 6. 9.
C# 델리게이트(Delegate) 메서드 참조의 강력한 도구 [C#] 델리게이트(Delegate) : 메서드 참조의 강력한 도구안녕하세요! 이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 알아보겠습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드 등 다양한 시나리오에서 사용됩니다.델리게이트(Delegate)란 무엇인가요?델리게이트는 메서드를 참조하는 형식으로, 다른 메서드를 호출하거나 이벤트 처리를 위한 콜백 메서드를 지정하는 데 사용됩니다. 델리게이트는 대리자(Delegate) 역할을 수행하여 메서드 호출을 대신합니다.델리게이트의 선언public delegate void MyDelegate(int x, int y);위 예시에서 MyDelegate 델리게이트는 두 개의 int 매개변수를 가지고 void 반환형을 갖는 메.. 2024. 6. 9.
반응형