전체 글

전체 글

    [C#] Task (1)

    [C#] Task (1)

    칩 제조사들은 cpu의 클럭 스피드를 올리는 것으로는 더 이상 물리적 한계에 부딪히게 되어 코어를 증가시키는 쪽으로 성능을 올렸습니다. 그렇기 때문에 성능 좋은 큰 프로그램을 만들려면 여러 개의 코어가 동시에 작업을 수행할 수 있도록 하는 병렬 처리 기법과 비동기 처리 기법이 필수가 되었죠. 그러나 병렬 처리와 비동기 처리는 말이 좋지, 막상 소프트웨어로 구현하려 들면 간단하지 않습니다. 여기서 잠깐 ★ 병렬 처리와 비동기 처리의 차이 병렬 처리와 비동기 처리는 비슷한 용어 같지민 듯이 엄밀히 다릅니다. 하나의 작업을 여러 작업자가 나눠서 수행한 뒤 다시 하나의 결과로 만드는 것을 병렬 처리 합니다. 이에 비해 비동기 처리는 작업 A를 시작한 후 A의 결과가 나올 때까지 마냥 대기하는 대신 곧이어 다른 ..

    [C#] Action 대리자와 Func 대리자

    [C#] Action 대리자와 Func 대리자

    2023.02.28 - [C# 프로그래밍] - [C#] 익명 메소드와 람다식 [C#] 익명 메소드와 람다식 2023.02.27 - [C# 프로그래밍] - [C#] 대리자(Delegate) [C#] 대리자(Delegate) C#에서 대리자는 콜백(Callback)을 구현하기 위해 사용됩니다. 콜백이란 어떤 일을 해줄 코드를 만들고, 이 코드가 실행할 이벤트 onesside-world.tistory.com 익명 메소드와 무명 함수(람다식)은 코드를 보다 간결하게 만들어주는 요소들입니다. 하지만, 단 하나의 익명 메소드나 무명 함수를 만들기 위해 매번 별개의 대리자를 선언해야 합니다. 이것은 너무 번거롭습니다. 이 문제를 해결하기 위해 .NET 프레임워크에는 Func와 Action 대리자를 미리 선언되어있습니..

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

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

    스레드 간의 동기화 프로그램을 구성하는 각 스레드는 여러 가지 자원을 공유하는 경우가 많습니다. 하지만, 스레드는 이기적이라 다른 상황은 신경쓰지 않습니다. 다른 스레드가 어떤 자원을 잡고 사용 중인데 갑자기 끼어들어 자기가 제멋대로 사용해버리는 경우가 대부분입니다. 그렇기 때문에 이런 스레드들을 순서에 맞게 자원을 사용하게 하는 것을 "동기화(Synchronization)"이라고 합니다. 스레드 동기화에서 가장 중요한 사명은 "자원을 한번에 하나의 스레드가 사용하도록 보장"하는 것입니다. .NET 프레임워크가 제공하는 대표적인 도구는 2가지로 lock 키워드와 Monitor 클래스가 있습니다. lock 키워드가 사용하기 쉽지만, Monitor 클래스가 더 섬세한 동기화 제어 기능을 제공합니다. 이제 사..

    프로세스와 스레드에 대한 이론 정리글(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..