C# 프로그래밍

    [C#] LINQ

    [C#] LINQ

    LINQ가 유용하다고 느끼게 된 일 제가 요즘 알고리즘 문제 풀이에 도전하고 있는데 C#으로 해보고 있습니다. 우주선이 산에 충돌하지 않도록 가장 높은 산부터 차례대로 파괴하는 문제입니다. 8개의 산은 왼쪽부터 0~7번의 인덱스를 가지고 인덱스를 출력하면 산에 발포하여 산을 파괴하는 문제였습니다. using System; using System.Linq; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; /** * The while loop represents the game. * Each iteration represents a turn of the game * where you a..

    [C#] 네트워크 프로그래밍

    [C#] 네트워크 프로그래밍

    2023.03.28 - [C# 프로그래밍] - [C#] TCP/IP 네트워크 (1) [C#] TCP/IP 네트워크 (1) 네트워크 기술은 다른 컴퓨터에서 실행되고 있는 상대 프로세스가 마치 한 컴퓨터, 아니 한 프로세스 안에 있는 객체인 것처럼 다루게 해 줍니다. 이런 강력한 기술을 다루기는 기본적으로 어렵 onesside-world.tistory.com 2023.03.29 - [C# 프로그래밍] - [C#] TCP/IP 네트워크 (2) [C#] TCP/IP 네트워크 (2) [IP주소 체계 요약] IP 주소는 컴퓨터 네트워크에서 각 호스트를 식별하는 데 사용되는 고유한 식별자입니다. IPv4는 32비트 주소 체계이며, 총 4,294,967,296개의 주소를 가질 수 있습니다. IPv6는 128비 ones..

    [C#] TCP/IP 네트워크 (2)

    [C#] TCP/IP 네트워크 (2)

    [IP주소 체계 요약] IP 주소는 컴퓨터 네트워크에서 각 호스트를 식별하는 데 사용되는 고유한 식별자입니다. IPv4는 32비트 주소 체계이며, 총 4,294,967,296개의 주소를 가질 수 있습니다. IPv6는 128비트 주소 체계이며, 총 340,282,366,920,938,463,463,374,607,431,768,211,456개의 주소를 가질 수 있습니다. IPv4 주소는 점으로 구분된 4개의 8비트 숫자로 표시되며, 예를 들어 192.168.0.1과 같은 형식입니다. IPv6 주소는 16진수로 구성된 8개의 16비트 블록으로 표시되며, 예를 들어 2001:0db8:85a3:0000:0000:8a2e:0370:7334와 같은 형식입니다. IP 주소는 지정된 네트워크와 호스트 부분으로 나뉘며, ..

    [C#] TCP/IP 네트워크 (1)

    [C#] TCP/IP 네트워크 (1)

    네트워크 기술은 다른 컴퓨터에서 실행되고 있는 상대 프로세스가 마치 한 컴퓨터, 아니 한 프로세스 안에 있는 객체인 것처럼 다루게 해 줍니다. 이런 강력한 기술을 다루기는 기본적으로 어렵지만, 쉽게 해주는 프레임워크 같은 게 있습니다. 대표적으로 유니티에서 쓰는 포톤 프레임워크 같은게 있습니다. 하지만 이런 프레임워크를 쓸려고 해도 네트워크에 대한 기초는 필수 요소이기 때문입니다. 그래서 이번 글에서 네트워크에 대한 기초를 저도 배우는 입장에서 적어보겠습니다. 컴퓨터끼리 네트워크에서 데이터를 주고받기 위해서는 그 네트워크에서 통용되는 "프로토콜(protocol)"을 따라야 합니다. 프로토콜은 규약, 규칙이라는 뜻의 낱말로, 여기에서는 컴퓨터들이 네트워크를 통해 데이터를 주고받기 위한 통신 규약을 말합니다..

    [C#] async 한정자와 await 연산자

    [C#] async 한정자와 await 연산자

    2023.03.27 - [C# 프로그래밍] - [C#] Task (1) [C#] Task (1) 칩 제조사들은 cpu의 클럭 스피드를 올리는 것으로는 더 이상 물리적 한계에 부딪히게 되어 코어를 증가시키는 쪽으로 성능을 올렸습니다. 그렇기 때문에 성능 좋은 큰 프로그램을 만들려면 여 onesside-world.tistory.com 2023.03.27 - [C# 프로그래밍] - [C#] task (2) [C#] task (2) 2023.03.27 - [C# 프로그래밍] - [C#] Task (1) [C#] Task (1) 칩 제조사들은 cpu의 클럭 스피드를 올리는 것으로는 더 이상 물리적 한계에 부딪히게 되어 코어를 증가시키는 쪽으로 성능을 올렸습니다. 그렇 onesside-world.tistory.co..

    [C#] task (2)

    [C#] task (2)

    2023.03.27 - [C# 프로그래밍] - [C#] Task (1) [C#] Task (1) 칩 제조사들은 cpu의 클럭 스피드를 올리는 것으로는 더 이상 물리적 한계에 부딪히게 되어 코어를 증가시키는 쪽으로 성능을 올렸습니다. 그렇기 때문에 성능 좋은 큰 프로그램을 만들려면 여 onesside-world.tistory.com *동기와 비동기 task 클래스는 우리가 비동기 코드를 쉽게 작성할 수 있도록 돕습니다. 그런데 비동기 코드가 뭔지를 아직 설명을 안 적었네요. 일단, 비동기 코드를 설명하기 전에 동기 코드를 먼저 설명하겠습니다. 동기 코드는 검사가 검으로 공격할 때처럼 동작합니다. 검사가 검으로 상대를 찌른 뒤에 다시 뽑아야 검을 쓸 수 있는 것처럼, 동기 코드는 메소드를 호출한 뒤에 이 메..

    [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 클래스가 더 섬세한 동기화 제어 기능을 제공합니다. 이제 사..