C# 프로그래밍

    프로세스와 스레드에 대한 이론 정리글(2)

    프로세스와 스레드에 대한 이론 정리글(2)

    스레드의 일생과 상태 변화 .Net 프레임워크는 스레드의 상태를 ThreadState 열거형에 정의해두었습니다. 상태 설명 Unstarted 스레드 객체를 생성한 후 Thread.Start() 메소드가 호출되기 전의 상태입니다. Running 스레드가 시작하여 동작 중인 상태를 나타냄. Unstarted 상태의 스레드를 Thread.Start() 메소드를 통해 이 상태로 만들 수 있음 Suspended 스레드의 일시 중단 상태를 나타냄. 스레드를 Thread.Suspend() 메소드를 통해 이 상태로 만들 수 있으며, Suspended 상태인 스레드는 Thread.Resume() 메소드를 통해 다시 Running 상태로 만들 수 있습니다. WaitSleepJoin 스레드가 블록(Block)된 상태를 나타..

    [C#] 스레드 사용법(1)

    [C#] 스레드 사용법(1)

    .NET 프레임워크에는 스레드를 나타내는 클래스로 System.Threading.Thread를 제공합니다. 사용법은 Step 1: Thread의 인스턴스를 생성합니다. 이때 생성자의 매개 변수로 스레드가 실행할 메소드를 넘깁니다. Step 2: Thread.Start() 메소드를 호출하여 스레드를 시작합니다. Step 3: Thread.Join() 메소드를 호출하여 스레드가 끝날 때까지 기다립니다. using System; using System.Threading; class Program { static void Main(string[] args) { // Step 1: 스레드의 인스턴스를 만들고 매개 변수로 실행할 메서드를 전달합니다 Thread thread = new Thread(new Thread..

    프로세스와 스레드에 대한 이론 정리글(1) (feat. chat gpt)

    프로세스와 스레드에 대한 이론 정리글(1) (feat. chat gpt)

    운영체제는 여러 프로세스를 동시에 실행해도 문제가 발생하지 않게 만드는 능력을 가지고 있습니다. ex) ppt, 유튜브, 게임 동시에 가능 프로세스 프로그램과 프로세스의 차이에 대해 요즘 유명한 chat gpt에 물어보았습니다. 번역결과 예, 프로세스와 프로그램에는 차이가 있습니다. 프로그램은 컴퓨터에서 실행할 수 있는 프로그래밍 언어로 작성된 명령 집합입니다. 컴퓨터의 메모리에 로드되고 운영 체제에서 실행될 때까지 하드 디스크나 USB 드라이브와 같은 저장 장치에 상주하는 정적 개체입니다. 반면에 프로세스는 프로그램이 메모리에 로드되고 운영 체제에 의해 실행될 때 생성되는 동적 엔터티입니다. 컴퓨터에서 실행 중인 프로그램의 인스턴스입니다. 프로세스에는 고유한 메모리 공간, 데이터 및 CPU 시간 및 입..

    [C#] 직렬화

    [C#] 직렬화

    직렬화: 객체의 상태(객체의 필드에 저장된 값들을 의미)를 메모리나 영구 저장 장치에 저장이 가능한 0과 1의 순서로 바꾸는 것을 의미합니다. C#에서 객체를 직렬화하는 방법은 아주아주 간단합니다. 그저 [Serializable] 애트리뷰트를 클래스 선언부 앞에 붙여주면 이 클래스는 메모리나 영구 저장 장치에 저장이 가능한 형식이 됩니다. [Serializable] class MyClass { ... } 이렇게 선언된 형식은 다음과 같이 Stream 클래스와 BinaryFormatter를 이용해서 간단히 저장할 수 있습니다. //a.dat 파일을 생성 Stream ws = new FileStream("a.dat", FileMode.Create); //BinaryFormatter은 System.Runtim..

    "=>" 연산자가 람다식 말고 쓰이는 곳 "식 본문 멤버"

    "=>" 연산자가 람다식 말고 쓰이는 곳 "식 본문 멤버"

    식 본문 멤버(Expression-Bodied Member)는 C# 6.0에서 도입된 기능으로, 간단한 속성, 메서드, 생성자, 종료자, 인덱서 및 연산자를 정의하는 더 간결한 방법을 제공합니다. 기존 코드보다 더 짧고 읽기 쉬운 코드를 작성할 수 있도록 도와줍니다. ▶Expression-Bodied Member의 작동 방식 Expression-Bodied Member는 람다 식과 유사하게 작동합니다. 멤버 본문이 단일 식으로 구성된 경우 => 연산자를 사용하여 식을 직접 지정할 수 있습니다. 예제 코드를 보면 이해가 될 겁니다. // 간단한 속성 정의 public string Name => "John Doe"; // 간단한 메서드 정의 public int Add(int x, int y) => x + y..

    [C#] 문 형식의 람다식

    [C#] 문 형식의 람다식

    2023.02.28 - [C# 프로그래밍] - [C#] 익명 메소드와 람다식 [C#] 익명 메소드와 람다식 2023.02.27 - [C# 프로그래밍] - [C#] 대리자(Delegate) [C#] 대리자(Delegate) C#에서 대리자는 콜백(Callback)을 구현하기 위해 사용됩니다. 콜백이란 어떤 일을 해줄 코드를 만들고, 이 코드가 실행할 이벤트 onesside-world.tistory.com 이전 글에서 예시로 들었던 코드가 있습니다. BubbleSort(array, delegate(int a, int b) { if (a > b) return 1; else if (a == b) return 0; else return -1; }); 바로 이것입니다. 그런데 저는 이 것을 람다식으로 BubbleS..

    [C#] 익명 메소드와 람다식

    [C#] 익명 메소드와 람다식

    2023.02.27 - [C# 프로그래밍] - [C#] 대리자(Delegate) [C#] 대리자(Delegate) C#에서 대리자는 콜백(Callback)을 구현하기 위해 사용됩니다. 콜백이란 어떤 일을 해줄 코드를 만들고, 이 코드가 실행할 이벤트 코드는 컴파일 시점이 아닌 프로그램이 실행 중인 시점에 부여하 onesside-world.tistory.com 이번 게시물을 이해하려면 무조건 전 게시물인 대리자에 대해 알고 있어야 합니다. 1. 익명 메소드 일단 예제부터 살펴보겠습니다. delegate int Calculate(int x, int y); class Program { static void Main(string[] args) { Calculate calc calc = delegate(int x..

    [C#] 대리자(Delegate)

    [C#] 대리자(Delegate)

    C#에서 대리자는 콜백(Callback)을 구현하기 위해 사용됩니다. 콜백이란 어떤 일을 해줄 코드를 만들고, 이 코드가 실행할 이벤트 코드는 컴파일 시점이 아닌 프로그램이 실행 중인 시점에 부여하는 식입니다. 객체의 주소를 가리키는 "참조"를 제가 전 게시물에서 소개한 적이 있을 겁니다. 대리자는 메소드에 대한 참조입니다. 대리자에 메소드의 주소를 할당한 후 대리자를 호출하 이 대리자가 메소드를 호출해 줍니다. 즉, 대리자(Delegate)는 메소드를 참조하는 객체입니다. 대리자는 메소드를 변수에 할당하거나 매개변수로 전달하거나 반환값으로 사용할 수 있습니다. 대리자는 델리게이트 타입을 선언하여 사용합니다. 델리게이트 타입은 반환형과 매개변수를 지정하여 선언합니다. 예를 들어, int를 반환하고 int..

    [C#] C#에서 예외 처리 구현 간단하게

    [C#] C#에서 예외 처리 구현 간단하게

    예외 처리는 코드 실행 도중 발생할 수 있는 예기치 않은 상황에 대응하기 위한 메커니즘입니다. 이러한 예외 상황은 프로그램의 실행을 중단시킬 수 있는데, 예를 들어 파일이 존재하지 않는 경우나 연산이 불가능한 경우 등이 있습니다. 이러한 상황에 대처하려면 예외 처리를 해야 합니다. C#에서 예외 처리는 try-catch-finally 블록을 사용하여 구현합니다. try 블록 안에는 예외가 발생할 가능성이 있는 코드를 작성합니다. catch 블록 안에는 예외가 발생했을 때 처리할 코드를 작성합니다. finally 블록은 try 블록에서 실행된 코드 이후에 항상 실행되는 코드 블록입니다. 예를 들어, 다음 코드는 파일을 읽어 들이는 코드입니다. try { StreamReader reader = new Str..