분류 전체보기 267

[C#] JSON 파싱 및 DLL 배포(1)

JSON 파싱개요  이전 게시글에선 nlohmann의 json.hpp를 이용해 JSON 파일을 파싱하는 방법을 다루었다. 이번에는 C#에서 제공하는 System.Text.Json 라이브러리를 사용하여 JSON 파일을 파싱하고, 해당 구조를 클래스로 묶어 DLL 파일로 배포하는 방법을 알아보겠다. JSON에 대한 내용은 해당 링크에 간략하게 설명해뒀으니, 해당 게시글을 읽기 전 필수적인 정보(키와 값의 개념) 정도만 확인하고 오자.본문JSON 파일 파싱  C# 에서는 Nuget 패키지 관리자를 통해 Json 파일을 파싱하는 라이브러리를 임포트할 수 있다. 이때 Newtonsoft.Json를 임포트하는 방법이 있고, System.Text.Json을 임포트하는 방법이 있다. 필자는 Visual Studio 2..

Language/C# 2024.07.09

[개발] 전처리기와 코드 스니펫 with Visual Studio

전처리기와 코드 스니펫개요  개발을 진행하다 보면, 디버깅 모드에서만 실행되어야 하는 코드가 존재한다. 즉, 릴리즈 빌드와 디버그 빌드에서 코드의 동작을 다르게 해주어야 할 필요가 있다. 이를 위해 전처리기 지시어 #ifdef와 #endif를 자주 사용한다. 이러한 전처리기 지시어는 다음과 같은 이유로 사용된다. 디버깅 목적: 디버깅 모드에서는 오류 메시지, 검사, 또는 추가 로깅을 수행하여 코드의 동작을 추적하고 문제를 해결할 수 있다. 이러한 디버깅 코드는 최종 사용자에게 제공되는 릴리즈 빌드에서는 불필요하거나 부적절할 수 있다.성능 최적화: 디버깅을 위한 추가 로그나 검사는 성능에 영향을 줄 수 있다. 예를 들어, 로그 출력은 성능을 저하시킬 수 있으며, 복잡한 검사나 디버깅 코드는 실행 속도를 느..

Develope 2024.07.08

[C#] 반응형 GUI

Responsive GUI개요  1892 x 1030 크기의 프로그램을 개발하고 있다고 가정해 보자. 만약 해당 프로그램을 실행하는 환경이 변화, 이를테면 디스플레이 배율이 변동하면 설계한 UI의 밸런스가 깨질 수 있다. 이러한 변화를 반영하여 프로그램을 개발하려면 반응형 GUI가 필요하다. 반응형 GUI는 앞서 언급한 환경에 따라 사용자 인터페이스가 자동으로 조절되는 디자인 룰을 의미한다. 이를 C# Winform에서 어떻게 구현할지 알아보는 시간을 가지도록 해보자.본문원인 분석  다음과 같이 1900 x 1050 크기의 프로그램을 Full HD(1920 x 1080, 텍스트 배율 100%) 환경에서 실행시키면 별 이상 없이 동작한다. 하지만 텍스트 배율을 125%로 변경하면 어떻게 될까?   텍스트 ..

Language/C# 2024.07.07

[파이썬] tkinter (2) - PDF 페이지 추출 프로그램

tkinter 개요   지난 시간에는 GUI에서 기초적인 라벨을 생성하고 창을 띄우는 작업을 해보았다. 이번 시간에는 이미지를 삽입하고 버튼을 생성하여 이벤트를 할당하는 방법에 대해 알아보겠다. 또한 입력을 받는 Dialog를 생성하여입력을 받고, 이를 이용한 프로그램을 만들어 보겠다.본문위젯 - 백그라운드 이미지 설정   오늘의 목표는 버튼을 클릭하면 PDF 파일을 선택하는 창이 뜨고, 해당 PDF 파일에서 특정 페이지를 추출하는 프로그램을 만드는 것이다. 먼저 그럴싸한 프로그램을 만들기 위해 백그라운드 이미지를 설정할 것이다. 이미지를 다루기 위해 다음과 같이 pillow 라이브러리를 설치하자.  pip install pillow   PIL(Python Imaging Library)은 Python에서..

Language/Python 2024.06.29

[파이썬] tkinter (1)

tkinter개요  파이썬에는 다양한 GUI(Graphical User Interface) 라이브러리가 존재한다. 그중, Python 표준 라이브러리인 tkinter는 Python과 함께 배포되므로 별도의 설치가 필요하지 않다. 이번 시간에는 해당 라이브러리를 통해 간단하게 GUI를 생성하는 방법에 대해 알아보도록 하겠다.GUI: 사용자가 컴퓨터와 상호작용할 수 있는 시각적 인터페이스. 텍스트 기반 인터페이스와 달리 아이콘, 버튼, 윈도우, 라벨 등 시각적 요소를 사용하여 직관적이고 사용하기 쉽게 만들 수 있다본문위젯 - 윈도우(Window)   윈도우는 기본적인 애플리케이션 창을 의미한다. Tkinter에서 하나의 기본 창을 생성하고 실행하는 방법을 예제로 설명해 보겠다. import tkinter a..

Language/Python 2024.06.24

[통신] CAN DBC

CAN DBC개요  지난 시간엔 CAN 통신에 대한 기초적인 내용(특징, 장점, 단점, 구조 등)에 대해 다뤘다. 이번 시간에는 구체적으로 CAN 통신을 하기 위해서 어떤 과정을 거쳐야 하는지, 이 과정에서 DBC(Data Binary Code)가 어떤 역할을 하는지 알아보도록 하겠다.본문통신 과정  앞서 CAN 통신을 하기 위해서는 MCU 내부에 CAN Controller가 내장되어 있어야 한다고 했다. 이러한 컨트롤러와 통신하기 위해서는 트랜시버(transceiver)가 필요하며, 송/수신되는 데이터를 모니터링하기 위해 물리적인 장치가 필요하다. 대표적으로 Peak CAN과 Vector CAN 장비가 있지만, 이 장비들은 가격이 비싸기 때문에 상대적으로 저렴한 CANable Pro v2.0 제품을 이..

CS/통신 2024.06.22

[통신] CAN 통신 개요

CAN 통신개요 및 특징  CAN(Controller Area Network) 통신은 호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 통신 프로토콜이다. 이때 호스트 컴퓨터(Host Computer)가 없다는 것은 각 장치가 중앙 제어 장치 없이 독립적으로 동일한 버스를 통해 데이터를 주고받는다는 것을 의미하며, 멀티플렉스 프로토콜(Multiplex Protocol)은 여러 신호를 하나의 통신 회선으로 다중 전송하여 회선 수를 줄인 것을 의미한다.  CAN 통신은 다음과 같은 특징을 갖고 있다. 1. 신뢰성: 메시지 충돌과 오류를 자동으로 검출하고 수정하는 기능을 내장하고 있어 노이즈에 강함. 이때 버스가 Twist Pari 2선(High, Low..

CS/통신 2024.06.09

[C++] std::binary_search

이진 탐색 개요 예전 이진 탐색에 대한 개념적인 부분을 해당 글에서 다룬 적이 있었다. 다시 상기하자면, 정렬된 배열을 반으로 나눠가며 원하는 값을 찾는 알고리즘이 이진 탐색이다. 이번 시간에는 해당 알고리즘을 구현한 std::binary_search 함수에 대한 사용법을 알아보도록 하자. 본문 사용법 이진 탐색 또한 탐색의 일종이므로, 배열 내에서 특정 요소가 존재하는지 확인할 때 사용된다. 이때 대상 범위가 이미 정렬되어 있어야 하며, 중복 요소가 있는 경우 어느 요소인지 알 수 없다. 이는 함수가 단순히 주어진 값이 배열 내에 존재하는지 여부만을 체크하기 때문이다. #include #include #include int main() { std::vector v = { 1, 2, 4, 5, 9, 10..

Language/C++ 2024.03.11

[백준] 2217 로프 with C++

문제설명 입출력 예제 개념 각 로프는 고유한 중량 한계를 가지고 있으며 이를 초과할 수 없다. 이때 로프 2개가 각각 10kg, 15kg을 버틸 수 있다고 하면, 10kg 한 개를 쓸 땐 10kg, 15kg 한 개를 쓸 땐 15kg, 10kg과 15kg을 함께 쓰면 각 로프가 10kg씩 버틸 수 있으므로 20kg를 버틸 수 있다. 이러한 특징에 착안하여 로프들을 강도에 따라 정렬하여 가장 강한 로프부터 시작하여 점점 약한 로프를 추가하며, 각 단계에서의 최대 중량을 계산할 수 있다. 이때 로프들 중 일부만을 선택해야 할 경우도 고려해야 한다. 예를 들어, 10, 20, 30, 40, 50kg을 버틸 수 있는 로프 5개가 있다고 가정해 보자. 1. 50kg: 50kg 2. 50kg, 40kg: 40 + 4..

Algorithm/백준 2024.03.08

[Unity] VR 시뮬레이터 만들기

VR 시뮬레이터 개요 VR 개발을 하다 보면, 현재 내 상황에 대한 디버깅이 필요한 순간이 있을 것이다. 예를 들어, 운전을 하는 VR을 개발 중이면 현재 개발 단계에서 어느 부분이 모자란지에 대한 정보가 필요한데, 이를 확인하기 위해 매번 빌드하는 과정이 상당히 번거롭다. 따라서 간단한 시뮬레이터를 구현하여 이를 해결해 보는 시간을 가지도록 해보겠다. 본문 전처리 지시문 유니티에서 코드를 실제 빌드 환경과 시뮬레이션 환경을 나누어 처리하고자 할 때 주로 전처리 지시문(Preprocessor Directives)을 사용한다. 전처리 지시문을 활용하면 특정 조건에 따라 코드의 일부를 컴파일러에서 제외하거나 포함시킬 수 있다. 이를 통해 실제 빌드와 에디터 내에서의 시뮬레이션을 구분할 수 있다. 유니티에서 ..

Game/Unity 2024.02.04