C# : GameJob 신규 공고 알람 앱 - WPF(MVVM), HttpClient, SQLite, Windows Toast
·
C#
https://github.com/Ellug/GameJobNotifier 1. 프로젝트 배경채용 사이트를 수시로 확인하는 반복 작업을 줄이기 위해, GameJob 공고를 주기적으로 수집하고 새로운 공고가 등록되면 즉시 알림을 주는 데스크톱 앱을 만들었다.단순히 “목록 보여주기”가 아니라, 로컬에 상태를 저장하고 이전 상태와 비교해 변화(신규/비노출/복원) 를 감지하는 구조로 설계했다. 2. 사용 기술 스택Language: C#Runtime: .NET 10 (net10.0-windows)UI: WPF + MVVM (CommunityToolkit.Mvvm)Hosting/DI: Microsoft.Extensions.HostingData: SQLite (Microsoft.Data.Sqlite)Crawling:..
C# : Chzzk(치지직) VOD / Clip 다운로더
·
C#
CHZZK VOD/CLIP 다운로더 개발기 (C# WinForms)치지직 VOD와 CLIP을 로컬로 저장하고, VOD 구간 채팅까지 함께 보관하는 도구를 개발했다.목표는 단순 다운로드 기능이 아니라, 응답 구조 변경에 덜 깨지는 안정성과 유지보수 가능한 코드 구조를 확보하는 것이었다. 몇년전 트위치에서는 다시보기 영상을 구간 다운로드, 클립 다운, 영상 채팅 로그 수집 등이 가능한 앱들이 있었다.하지만 어느순간 하나둘씩 사용할 수 없게되었고, 치지직에는 유사 앱이 거의 존재하지 않게 됐다.그나마 풀려있는 치지직 다운로더는 광고 떡칠이라 불편해서 못 쓸 지경이었다. 그래서 다음 기능을 하나의 앱으로 통합했다.VOD/CLIP 모드 전환해상도 선택 + 구간 다운로드VOD 채팅 저장(JSON/SRT/TXT)ff..
C# - 델리게이트(Delegae). 람다식과 캡쳐, 클로져 문제 (feat. useState)
·
C#
사전 지식델리게이트(Delegate) : 함수를 변수처럼 저장하고 실행할 수 있는 타입.void PrintHello() => Console.WriteLine("Hello");void PrintBye() => Console.WriteLine("Bye");Action printer = PrintHello; // 함수 참조를 저장printer(); // Helloprinter = PrintBye; printer(); // Bye 람다식(Lambda Expression) : 화살표 함수, 익명 함수 등으로 불리는 간단한 표현 문법.Func square = (x) => x * x;Console.WriteLine(square(5)); // 25 캡쳐 (Capture)람다식이 외부 스코프의 변수를 참조할 때, 그 변..
VisualStudioCode(VSC) 에서 한글 깨짐 이슈
·
C#
Unity 프로젝트 협업 중 팀원의 주석이 및 한글 문자가 깨지는 현상을 발견했따//�̱��� ���� //1. �ı����� �ʵ��� DonDestroy //2. �̹� �ڽ��� �����ϸ� �ı� ??? 확인 결과 Git에도 정상적으로 올라가있고,내 환경에서만 이러한 현상이 발견됐다. 팀원 모두 VisualStudio를 이용하고 있고나는 VisualStudioCode를 이용하고 있다. 원인은 인코딩 불일치라고 한다. VS와 VSC에서 UTF의 인코딩은 다음과 같이 차이가 난다고 한다. VSVSC기본 인코딩UTF-8 with BOMUTF-8 (no BOM)Unity C# 기본 저장Windows 환경에선 UTF-8 with BOM 권장VSCode는 BOM 없이 저장 시 한글 깨짐 발생 가능GitH..
Design Pattern - Singleton Pattern (싱글톤 패턴)
·
C#
싱글톤 패턴 (Singleton Pattern)프로그램 전체에서 단 하나의 인스턴스만 존재하도록 보장하고, 어디에서든 그 인스턴스에 접근할 수 있게 하는 디자인 패턴이다.프로젝트 내의 전역 관리자 같은 역할을 하는 구조다.인스턴스가 하나만 생성됨 (유일성 보장)static 변수를 통해 어디서든 접근 가능 (전역 접근성)필요할 때 자동으로 생성되며, 이미 있으면 새로 만들지 않음주로 게임에서 상태 관리나 시스템 매니저 역할에 사용Unity에서는 씬이 분리되어 있고 여러 스크립트가 서로 다른 오브젝트 위에서 동작한다.이때 "게임 전체 상태"를 한 곳에서 관리해야하는 경우가 있다.씬이 바뀌어도 유지돼야 하는 정보 (플레이어 점수, 설정값, 능력치 등)전역적으로 접근해야 하는 시스템 (사운드, 데이터, UI 등..
Design Pattern - Adapter Pattern (어댑터 패턴)
·
C#
어댑터 패턴 (Adpater Pattern)서로 다른 인터페이스를 가진 클래스들을 함께 동작하도록 연결하는 디자인 패턴이다.기존 시스템을 건드리지 않고, 새로운 클래스나 라이브러리를 기존 구조에 자연스럽게 통합할 때 유용하다. 가장 직관적인 비유는 플러그 변환기 다.220V 콘센트에 110V 기기를 연결하려면 어댑터가 필요하듯,소프트웨어에서도 기존 코드의 인터페이스와 새 클래스의 인터페이스가 맞지 않을 때 이를 변환해주는 역할을 한다. 기본 구성은 다음 세가지로 이루어진다.Target (목표 인터페이스)클라이언트가 기대하는 인터페이스Adaptee (적응될 클래스)기존 시스템과 호환되지 않는 외부 클래스Adapter (어댑터)Target 인터페이스를 구현하면서 내부적으로 Adaptee를 호출하여 변환 ..
C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기
·
C#
문제 상황1차 콘솔 프로젝트 위 사진은 이전에 진행했던 콘솔 프로젝트다.투사체를 발사해서 내려오는 블럭을 파괴하는 간단한 게임이며가로3 x 세로2 크기의 셀을 논리 그리드로 정해서 배경색을 이용해 하나의 블럭처럼 표현했다. 실시간 슈팅 게임이므로 일정 시간마다 프레임을 갱신하는 업데이트 기반으로 구성되어 있었는데최초에 Console.Clear()로 작성하였더니 심한 깜빡임 현상이 발생했다. 이를 해결하고자 클리어가 아닌 SetCursorPosition() 을 이용해 다시 그리는 방식을 채용했으나깜빡임은 해결됐지만 화면 출력이 느리게 밀려 보이는 현상이 발생했다. 당시 자력으로 해결하지 못하고 이 문제에 대해 질문을 하였고 "2중 버퍼링을 활용해봐라" 라는 답변을 들었다.하지만 콘솔에서 대체 2중 버퍼링을..
C# - GetAsnycKeyState() 기반 실시간 키 입력 처리
·
C#
콘솔의 기본적인 Console.ReadKey() 기반으로 입력을 받으면, OS의 연속키 입력 지연 때문에 입력이 느리고 답답하게 느껴진다.이는 실시간 게임 같은 것에서는 조작감을 치명적으로 망쳐놓는 원인이 된다. 비슷한 현상을 Unity에서도 겪은 바 있기에, 이를 해결하고자 KeyDown / KeyUp을 이용한 인풋 시스템을 만들고자 했으나C#에는 KeyUp 기능이 없다...! 없으면 직접 만들어야지 뭐... 결론부터 말하면 GetAsyncKeyState()라는 Win32 API가 제공하는 비동기 키 입력 감지 함수를 이용해 해결할 수 있다. if (Console.KeyAvailable){ var key = Console.ReadKey(true).Key; switch (key) { ..
C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지
·
C#
콘솔프로젝트 도중, 시작과 동시에 콘솔 창 크기를 고정하고, 창 크기를 바꾸지 못하게 고정하고 싶었다. 사실 Console.SetWindowSize()를 이용해서 창 크기를 설정할 수 있지만이것만으로는 사용자가 마우스로 창 모서리를 드래그하거나, 최대화 버튼을 클릭하면...콘솔 프로젝트는 그냥 망가져버릴 수 있다. 이 문제는 Window API를 사용해서 콘솔 창의 윈도우 스타일을 직접 수정하는 것으로 해결할 수 있다. using System;using System.Runtime.InteropServices;namespace WeaponMasterDefense{ public static class ConsoleWindowManager { [DllImport("user32.dll"..
C# - 콘솔 폰트 크기 변경하기 SetCurrentConsoleFontEx
·
C#
C#의 콘솔 앱은 기본적으로 Consolas 폰트, 16픽셀 내외의 크기로 표시된다.하지만 콘솔 게임이나 텍스트 UI를 구현할 때는, 글자 폭과 높이를 세밀하게 조정해야 한다.이를 위해 Windows API(karnel32.dll)을 호출해 콘솔의 폰트를 직접 변경할 수 있다. 필자는 텍스트 셀의 크기를 많이 줄여서 실제 픽셀처럼 사용하기 위해 이 기능을 사용했다. Windows API를 통한 콘솔 제어C#의 System.Console 클래스는 기본적인 출력 기능만 제공한다.폰트 크기, 폭, 이름 등을 직접 바꾸는 기능은 없다. 따라서 폰트를 조정하기 위해선 Win32 API를 직접 호출해야 하는데이때 C#에서 C/C++ DLL 함수를 호출하기 위해 사용하는 기능이 바로 P/Invoke (Platfor..