전체 글 552

[C/C++] 구조체(struct) 기초 확인하기

안녕하세요 C/C++ 언어를 배우면서 클래스로 넘어가기 전에 struct 자료형에 대해 알고 있으면 도움이 될 것 같아서 내용을 정리해 보았습니다. struct가 이런 내용이었지 확인 차 혹은 기초를 알고자 하는 분들에게 도움이 되었으면 합니다. 1. 구조체(struct)란? 구조체란 이름, 나이, 주소처럼 서로 관련 있는 여러 타입의 변수들을 하나의 그룹으로 묶어 새로운 자료형을 만드는 기능입니다. 마치 여러 정보를 담고 있는 학생증처럼, 데이터들을 하나로 묶어 편리하게 다룰 수 있게 해주는 유용한 도구입니다. 2. 구조체 정의하고 변수 선언하기 1) 구조체 정의하고 변수 선언 구조체를 사용하는 일반적인 방법은 태그(Tag) 이름을 지정하여 틀을 만드는 것입니다. struct Student..

Programming/C, C++ 2025.07.12

[C++] 람다(Lambda)가 없던 시절 사용했던 방법 알아보기

안녕하세요. 오늘날 C++ 개발에서 람다(Lambda) 표현식을 알게 모르게 사용하고 있습니다. 코드를 간결하게 만들고 알고리즘과 함께 사용할 때 가독성을 크게 높여줍니다. 하지만 람다가 표준으로 채택된 것은 C++11부터입니다. 그렇다면 람다가 없던 C++03 시절에는 비슷한 작업을 어떻게 처리했는지 알아보겠습니다. count_if 알고리즘을 예제로 C++ 프로그래밍 기법으로 확인해 보겠습니다. 1. 가장 전통적인 방식: 함수 포인터 (Function Pointer) 가장 고전적인 방법은 함수 포인터를 알고리즘에 직접 전달하는 것입니다. 특정 조건을 검사하는 전역 함수를 만들고, 이 함수의 주소를 넘겨주는 방식입니다. #include #include #include // 1. 조건 검사를 위한..

Programming/C, C++ 2025.07.11

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 33 - Soft IRQ 디버깅

안녕하세요. 이번에서 앞에서 알아본 Soft IRQ 이벤트를 분석하고 서비스 실행 횟수확인 해보겠습니다. 1. Soft IRQ 이벤트를 위한 ftrace 1) 이벤트 활성화 커널에서 Soft IRQ를 위한 이벤트를 제공합니다. softirq_rasie : Soft IRQ 서비스를 요청, 실행함수는 __raise_softirq_irqoff() softirq_entry : Soft IRQ 서비스 실행 시작, 실행함수는 __do_softirq() softirq_exit : Soft IRQ 서비스 실행 마무리, 실행함수는 __do_softirq() 이전에 사용했던 스크립트를 활용해서 이벤트를 활성화합니다. #!/bin/bashecho 0 > /sys/kernel/debug/tracing/tracin..

IT/Linux Kernel 2025.07.10

객체지향 시스템 디자인 원칙, 독서후기

안녕하세요. 1. 책 선택 이유 레뷰(REVU) 캠페인에 선정되어서 책을 보게 되었습니다. 장점만을 적기보다는 책 내용을 확인할 수 있게 정리해 보았습니다. 2. 목차 확인 실제 자세한 목차가 있지만, 조금 쉽게 정리된 객체지향 시스템 디자인 원칙을 중심으로 도식화한 그림이 있어 보면 좀 더 쉽게 이해할 수 있습니다. ​3. 책 속 내용 확인 p5 - "객체지향 디자인을 두 가지 구체적인 각도에서 탐구한다. ... 첫째, 개발자의 작업 대부분은 기존 시스템을 유지하고 발전시키는 데 초점이 맞춰져 있다. ... 따라서 이 책은 자연스러운 복잡성 증가에 맞서 싸우는 방법을 주로 다룬다.​ 둘째, 처음에는 자신이 무엇을 구축하고 있는지 잘 모르는 경우가 많다. ... 이 책의 목적은 항상 절대적..

Book Report/IT&Tech 2025.07.08

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 32 - 태스크릿(Tasklet) 설명

안녕하세요. Soft IRQ 서비스를 사용할 있는 인터페이스인 태스크릿에 대해 알아보겠습니다. 책 내용에서 필요한 부분을 요약해서 정리해 보겠습니다. 1. 태스크릿이란 태스크릿은 Soft IRQ 서비스 중 하나의 동적으로 Soft IRQ를 사용할 수 있는 인터페이스이며 드라이버 레벨에서 태스크릿을 자주 활용합니다. softirq_to_name 배열에서 TASKLET을 확인할 수 있으며 이를 토대로 태스크릿이 Soft IRQ 서비스 중 하나임을 알 수 있습니다. linux# vim kernel/softirq.c Soft IRQ 서비스를 실행하다는 것은 Soft IRQ 서비스 핸들러 함수를 호출한다는 의가 됩니다. 그렇다면 Soft IRQ 태스크릿 서비스를 실행할 때는 tasklet_act..

IT/Linux Kernel 2025.07.06

[C++] 스마트 포인터 weak_ptr에 대해서 알아보기

안녕하세요. 조금은 흥미 없어 할 수 있는 내용인데 스마트 포인터 중 하나인 weak_ptr이라는 것이 있구나 차원에서 보면 어떨까 합니다. 1. 컨트롤 블록과 shared_ptr의 원리 weak_ptr를 이해하려면, 먼저 그 기반이 되는 shared_ptr과 컨트롤 블록(Control Block)의 관계를 조금 알아야 합니다. shared_ptr이 객체를 관리할 때, 힙 메모리에 컨트롤 블록이라는 별도의 관리용 데이터 구조를 생성합니다. 이 컨트롤 블록은 객체의 생명주기를 결정하는 핵심 정보를 담고 있습니다. 1) 컨트롤 블록의 내용 (1) Strong Reference Count (강한 참조 카운트) : 객체를 '소유'하는 shared_ptr의 개수입니다. 이 카운트가 0이 되면 객체는 ..

Programming/C, C++ 2025.07.05

코딩으로 세상을 바꿀 수 있다면, 독서후기

안녕하세요. 1. 책 선택 이유 IT 상식을 지속적으로 갱신하고자 찾다가 개발자라면 한 번쯤 생각해 봤을 제목이라 선택했습니다. 코딩으로 세상을 바꿀 수 있다면, 제목처럼 정말 가능할까 생각이 들었습니다. 2. 간략한 내용 소개 중간생략... 이 책은 더 넓은 시야로 프로그래밍을 바라볼 수 있도록 프로그래밍의 발전 역사, 프로그래밍 과정, 코딩 언어의 특징, 빅데이터 시대에 프로그래밍이 갖는 특유성 등을 입체적으로 다룬다. 코딩과 프로그래밍에 대한 개괄적 설명은 물론이고 개발자가 문제를 해결하는 방식, 개발자의 사회적 역할, 기술과 사회의 상호작용에 대한 인문학적 성찰까지 내 곁의 기술을 이해하고 활용하기 위해 알아야 할 지식을 고루 담았다. 또한 책 곳곳에 생생한 현장 사례와 ‘모두를 위한 기..

Book Report/IT&Tech 2025.07.04

[Qt] fritzing (회로설계) Open Source 빌드해보기 (실패담)

안녕하세요. OR CAD처럼 전문적인 회로도 구성은 아니지만, 조금 쉽게 회로도를 만들고, PCB까지 만들 수 있는 제작할 수 있는 프로그램입니다. fritzing은 Qt로 오픈소스로 되어 있어 참여도 해볼까 생각도 들어 빌드해 보았는데 될 듯 말 듯하다가 결국 실패한 내용 공유드립니다. 프로젝트가 중간에 한번 중지되었다가 다시 진행되는 것 같은데, 유료 버전과 빌드해서 사용하는 사람들에게는 무료다 보니 빌드 자료는 업데이트가 되지 않는 듯합니다. 실패한 것을 왜 올리느냐 할 수 있는데, Gemini와 GPT에게 물어 가면서 했지만, 사람을 실험시키는 아직 미완성 AI 내용을 따라 했기 때문에 아마 시도한다면 비슷하게 할 것이라 생각되어 미리 프롬프트 등을 입력해서 작업을 하는 것에 도움이 될..

Programming/Qt 2025.07.03

[Qt] Qt Creator에서 생성한 python 가상환경에서 PySide6 작업하기

안녕하세요. Qt Creator 툴을 사용하면서 Python도 가능하다는 것을 알고 있을 것입니다. PySide6을 사용하면서 코딩하면 되는 것 아니냐고 할 수 있는데, 가상환경을 이용한다면 라이브러리도 설치하고 배포할 리스트화 할 수 있습니다. 간단하게 사용하는 방법을 알아보겠습니다. 프로젝트 환경은 Windows11, Qt 6.8.3에서 진행했습니다. 1. Qt for Python 프로젝트 생성 기본적인 프로젝트 방법은 동일합니다. 선택을 Qt for Python으로 합니다. 그리고 UI도 가능한 것을 확인하기 위해서 Window UI를 선택합니다. Project Location, Name과 Define Class Name은 원하는 것으로 하면 됩니다. 여기서는 Name을 Qt_f..

Programming/Qt 2025.06.28

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 31 - ksoftirqd 스레드에 대해서

안녕하세요. Soft IRQ를 알아가면서 필요한 ksoftirqd에 대해서 알아보도록 하겠습니다. 1. ksoftirqd 스레드에 대해서 percpu 타입의 프로세스이며 ksoftirqd 스레드는 CPU 코어의 개수만큼 생성돼서 정해진 CPU 내에서만 실행됩니다. ksoftirqd 프로세스는 커널 스레드로 Soft IRQ 서비스를 레벨에서 처리하는 역할입니다. 라즈베리 파이에서 ksoftirqd를 확인할 수 있습니다. pi# ps axl | grep ksoftirq 코어가 4개인 시스템인 것을 알 수 있으며 ksoftirqd/[CPU 번호] 같은 규칙으로 이름을 생성됩니다. ksoftirqd 스레드는 swawn_ksoftirqd()함수 내 smpboot_register_percpu_th..

IT/Linux Kernel 2025.06.27

[C++] if 조건문과 암시적 bool 형변환에 대해 이해하기

안녕하세요. C++에서 if(expression) 문은 가장 기본적인 제어문 하나입니다. 우리는 보통 표현식(expression) 자리에 true 또는 false를 반환하는 비교 연산(i > j 등)이 알고 있습니다. 하지만 C++의 if문은 생각보다 훨씬 유연하게 동작합니다. 그리고 바로 그 부분이 미묘한 버그의 원인이 되기도 합니다. 이번 글에서는 if문의 조건식이 어떻게 평가되는지, 그리고 C++11의 explicit 키워드가 사용하기 전에 개발자들이 bool 타입에 대한 내용에 대해 재미 삼아 알아보겠습니다. 1. 숫자와 포인터도 받아주는 if문 C++의 if문은 조건식의 결과가 꼭 bool 타입일 필요가 없습니다. 0이 아닌 숫자나 null이 아닌 포인터 등 참(true)으로 평가될 ..

Programming/C, C++ 2025.06.26

2025년 6월 실내에서 키운 당근(carrot) 수확하기

안녕하세요. 올해 1월에 당근 수확을 하고 2달 정도 땅(?)을 쉬게 해 주고, 올해 3월 봄에 심어 또 수확을 했습니다. 대략 1년이 2번 정도 가능해 보입니다. 참고로, 다이소 구매한 1,000원짜리 당근 씨앗으로 몇 년째 사용하고 있는데, 보관방법은 김치 냉장고에 밀봉 포장해서 사용할 때만 꺼내서 씨앗을 사용했습니다. 다른 분들도 햇빛이 들어오는 창가 있다면 도전해 보는 것도 좋을 것 같아요. 같은 장소에 상추도 잎이 커지긴 하지만, 일조량이 많지 않아서 그런지 잎은 싱싱하지 않았습니다. 아침에 햇빛 받을 수 있는 장소라면 열매 식물까지는 안 되겠지만, 근채류 혹은 뿌리채소(당근, 고구마 등) 정도는 수확 가능할 것 같습니다. 1. 3월 초 심고 새싹 확인 씨앗이 생각보다 발아가 잘..

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 30 - Soft IRQ 처리 시점 확인

안녕하세요. Soft IRQ 이어서 확인해 보겠습니다. 어떤 프로세스가 언제 처리하는지 확인하는 내용입니다. 1. Soft IRQ 서비스 실행 요청 점검 이전 내용을 확인하면, Soft IRQ 서비스는 인터럽트 핸들링을 마무리한 후 처리했고 커널에서 인터럽트 처리를 시작하고 종료하는 __handle_domain_irq() 함수를 보면 내용을 확인할 수 있었습니다. __handle_domain_irq() 내에서 generic_handle_irq() 함수 호출(인터럽트 핸들러) 처리를 마치고 irq_exit() 함수를 호출합니다. 바로 Soft IRQ 서비스를 처리하는 시작점이라고 볼 수 있습니다. 1) irq_exit() 함수 확인 Soft IRQ 서비스 실행의 시작점인 내용으로 생각하고 확..

IT/Linux Kernel 2025.06.24

[Qt for Android] 카메라 영상 확인을 위한 yuv raw 데이터 저장 및 프레임 확인하기

안녕하세요. 안드로이드 카메라 영상(yuv) 프레임 데이터를 출력하면서 저장된 프레임이 잘 나오지 않아서 확인해 보았습니다. 테스트 환경은 Qt Creator와 Qt for Android(6.8.3), galaxy S20을 이용했습니다. 1. yuv Raw 데이터 저장 카메라 영상을 가지고 오는 로직은 제외했습니다. 영상 데이터가 전달되었다고 생각이 드는데, 영상이 나오지 않는다면, 간단하게 첫 프레임을 저장해서 확인해 보는 것입니다. void VideoWidget::slotImageReady(uint8 * data, int size, int width, int height, int format, int bpl){ QMutexLocker locker(&m_mutex); if (!i..

Programming/Qt 2025.06.22

[C++] shared_ptr (1) - 필요성에 대해 알아보기

안녕하세요. C++에서 메모리 관리는 중요한 요소 중 하나입니다. 특히 new와 delete를 사용하여 직접 메모리를 할당하고 해제하는 방식은 유연성을 제공하지만, 동시에 다양한 문제점을 야기할 수 있습니다. 이번 글에서는 이러한 문제를 해결하기 위한 방법 중 std::shared_ptr에 대해 알아보겠습니다. 1. shared_ptr란 무엇일까요? std::shared_ptr는 C++11부터 표준 라이브러리에 포함된 스마트 포인터(Smart Pointer)의 한 종류입니다. 스마트 포인터는 이름 그대로 일반적인 "날 것의 포인터(raw pointer)"가 가지고 있는 단점을 보완하기 위해 만들어진 객체 래퍼(object wrapper)입니다. shared_ptr의 핵심은 참조 횟수(refer..

Programming/C, C++ 2025.06.20

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 29 - Soft IRQ 요청 시점 확인

안녕하세요. Soft IRQ를 이어서 언제 요청하는지 대해서 좀 더 확인해보려고 합니다. 1. Soft IRQ 서비스 요청의 전체 흐름 전체 흐름을 보면서 Soft IRQ 서비스 요청하는 시점을 알아보겠습니다. 아래 그림은 Soft IRQ 서비스 요청 시의 자료구조입니다. 인터럽트 핸들러나 인터럽트 핸들러 서브루틴에서 호출하는 함수의 동작의미 합니다. __raise_softirq_irqoff는 Soft IRQ 서비스를 요청하는 동작을 하며, or_softirq_pending 함수로 irq_stat[cpu].__softirq_pending에 Soft IRQ 서비스 비트를 활성화하는 역할을 합니다. irq_stat는 배열이 percpu 타입의 변수로 CPU 코어의 개수만큼 존재합니다. ..

IT/Linux Kernel 2025.06.19