전체 글 493

[C++] 연산자 오버로딩(Operator Overloading)에 대해 좀 더 알아보기

안녕하세요. 이번에는 C++의 기능 중 하나인 연산자 오버로딩(Operator Overloading)에 대해 알아보겠습니다. 연산자 오버로딩을 언제 사용하는 거야?라고 할 수 있습니다. 그러나 직접 객체 간 연산(?)을 하지 않는 코드라면 사용하지 않았을 수도 있습니다. 그러나 연산자 오버로딩을 사용하면 사용자 정의 클래스(우리가 직접 만든 타입)에 대해서도 `+`, `-`, `=`, ` 마치 int나 float 같은 기본 타입처럼 객체를 다룰 수 있어 코드의 가독성과 직관성을 크게 높일 수 있습니다. 1. 연산자 오버로딩이란? 함수 오버로딩은 이름이 같은 함수라도 매개변수의 타입이나 개수가 다르면 여러 개 정의할 수 있는 기능이라고 자주 들어 봤을 겁니다. 마찬가지로, 연산자 오버로딩은 기..

[FreePBX] AMI란 무엇이고 접속해보기

안녕하세요 FreePBX 관련해서 물리적 측면 보다 SW적 확인할 일이 있어서 자료를 찾아보고 테스트해 본 내용을 공유드립니다. FreePBX분야 전문 개발자가 아니다 보니, 실수한 내용들이 있을 수 있습니다. 참고 정도로 봐주시고, 잘못된 부분은 댓글 주시면 수정하도록 하겠습니다. FreePBX에 접근해서 신호를 제어하기 위해서 AMI(Asterisk Manager Interface)를 먼저 알고 접속해야 합니다. 그래서 첫 번째 내용으로 간단한 이론과 접속하는 방법을 정해보았습니다. API 방법도 있지만, AMI가 좀 더 제어권한이 많아 선택해서 테스트했습니다. 이후 AMI로 해볼 수 있는 기능을 python으로 몇 가지 테스트하는 글을 올려 보겠습니다. 테스트한 환경은 Virtual B..

번역가 되는 법, 독서후기

안녕하세요. 1. 책 선택 이유 최근 컴퓨터 책 번역에 대한 공고가 나왔는데, 나중에 한번 재미있게 할 수 있지 않을까 생각이 들었습니다. 영어 실력이 썩 좋지는 않지만, IT에 관한 분야 책이라면 가능하지 않을까 잠깐 생각이 들어 찾아보았습니다. 번역가는 어떤 일을 하고, 가능한 일 인지 등 간단하게 읽어볼 수 있는 책이라 생각되어 읽어 보았습니다. 2. 간략한 내용 소개 현실에서 출판 번역가는 어떤 사람이고 어떻게 되는가 “어떻게 하면 출판 번역가가 될 수 있나요?” 하는 질문을 종종 듣습니다. 다른 한편으로 “번역이 뭐 별거 있어?”라는 말도 자주 듣습니다. 어떤 사람에게는 되고 싶어 마지않는 직업이자 어떤 사람에게는 대수롭지 않은 일을 하는 직업. (중간생략)전문 번역가로 20여 년간..

[C++] using 정의와 추가적인 기능 알아보기

안녕하세요. using 키워드를 쉽게 namespace 활성화로만 사용하고 있다는 생각에, 추가적인 기능에 대해 알아보았습니다. using은 코드의 가독성을 높이고, 특히 네임스페이스 관리와 클래스 상속 관계에서 발생하는 미묘한 문제들을 해결하는 데 중요한 역할을 합니다. 1. using 기본 기능 - 네임스페이스 활성화 C++에서는 이름 충돌을 방지하고 코드를 모듈화 하기 위해 네임스페이스(namespace)를 사용합니다. 예를 들어, C++ 표준 라이브러리의 대부분 기능은 std 네임스페이스 안에 정의되어 있습니다. #include #include int main() { std::cout numbers; return 0;} 매번 std::를 붙이는 것은 번거로울 수 있습니다. 이때 ..

Programming/C, C++ 2025.04.25

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 17 - 태스크 디스크립터(task_struct) 접근 매크로 함수(current)

안녕하세요. 이전 글에서는 프로세스를 관리하는 자료 구조로 task_struct, thread_info 구조체를 확인했습니다. 커널 입장에서는 프로세스 속성 정보가 있는 이 구조체에 자주 접근해서 프로세스를 처리가 필요합니다. 그런데 디바이스 드라이버 코드에서는 이 구조체에 접근하지 못하게 하고 있으나 매크로 함수(current_thread_info(), current)로 대신 접근할 수 있게 하고 있습니다. 1. current 매크로 current 매크로의 제공 배경은 책에서 설명 있긴한데, 여기서는 간단하게 요약하자면 시스템에 영향을 주지 않는 형태로 태스크 디스크립터의 주소에 접근하는 매크로를 필요 요구사항에 의해 만들어졌다고 합니다. current 매크로는 현재 구동 중인 프로세스..

IT/Linux Kernel 2025.04.24

[C++] namespace 사용법 읽을거리

안녕하세요. C++ 프로그래밍에서 코드의 규모가 커지거나 여러 라이브러리를 사용할 때 발생할 수 있는 이름 충돌(Name Collision) 문제이 발생하기도 하고, 코드를 논리적으로 구분할 때 namespace를 사용할 텐데요. 조금 알아보겠습니다. 1. namespace란 무엇이고 왜 사용할까? C++ 프로젝트를 진행하다 보면, 내가 만든 함수나 변수 이름이 다른 라이브러리나 팀원이 만든 코드의 이름과 겹치는 경우가 생길 수 있습니다. 예를 들어, print()라는 함수를 여러 곳에서 정의한다면 컴파일러는 어떤 함수를 호출해야 할지 알지 못해 오류를 발생합니다. namespace는 이러한 이름 충돌 문제를 해결하기 위해 도입된 문법입니다. 특정 코드 영역을 고유한 이름 공간(namespace..

Programming/C, C++ 2025.04.23

프로그래머가 되기 전에 알았더라면 좋았을 것들, 독서후기

안녕하세요. 1. 책 선택 이유 오래된 책이긴 한데, 프로그래머의 삶으로 궁금하기도 하고, 어떤 것에 후회하고 어떤 것을 추천하는지 궁금하기도 해서 읽어 보았습니다. 개발자로서 조언해 준다면 감사히 받아들이고, 인생도 소스코드처럼 수정과 보완하며 만들어 가야 하지 않을까 합니다. 2. 간략한 내용 소개 벤츠 탈 것인가, 커피 탈 것인가? 그 차이는 기술력이 아니라 업무력!미래의 사업가 ? CEO를 꿈꾸는 프로그래머를 위한 천금 같은 조언들 저자는 프로그래머에게 필요한 덕목으로 기술력 외에 회사원으로서의 각종 업무력을 강조한다. 떠도는 이야기나 누군가의 성공담이 아닌 자신이 직접 겪어왔던 경험을 바탕으로 조언한다. 왜 프로그래머에게 소통력, 영업력, 협상력이 필요한지, 왜 프로그램은 기술만으로는 ..

Book Report/IT&Tech 2025.04.22

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 16 - 스레드 정보(thread_info)

안녕하세요. 이전 글에서는 프로세스 속성을 관리하는 자료구조인 태스크 디스크립터를 확인했습니다. 이번 글에서는 프로세스 실행동작은 관리하는 thread_info에 대해서 확인합니다. 이번 부분은 내용이 조금 많아서, 빠르게 요약하면서 따라가 보겠습니다. 그래서 지루할 수 있습니다. 1. thread_info 구조체란? 태스크 디스크립터(task_struct)는 프로세스의 공통 속성 정보를 저장, 관리를 합니다. thread_info 구조체는 프로세스의 세부 실행 정보를 저장하거나 로딩하는 자료구조를 관리합니다. 핵심 실행정보 저장하는 하는 내용은 - 선점 스케줄링 실행 여부 - 시그널 전달 여부 - 인터럽트 컨텍스트와 Soft IRQ 컨텍스트 상태 - 휴먼 상태로 진입하기 직전 레지스터를..

IT/Linux Kernel 2025.04.20

[C++] 동적 바인딩과 가상 함수에 대한 짧게 읽을거리

안녕하세요. 이번에는 C++ 동적 바인딩과 이를 가능하게 하는 가상 함수 개념에 간단하게 확인해 보겠습니다. 1. 동적 바인딩 (Dynamic Binding) 이란? 동적 바인딩 또는 늦은 바인딩 (Late Binding)은 실행 시점(Runtime)에 호출될 함수를 결정하는 방식입니다. 이는 컴파일 시점에 호출될 함수가 결정되는 정적 바인딩 (Static Binding)과 대조가 되는 개념입니다. C++에서는 주로 가상 함수 (Virtual Functions)를 통해 동적 바인딩을 구현합니다. 2. 가상 함수 (Virtual Functions) 이전 글에서도 한번 설명하였습니다. 가상 함수는 기반 클래스에서 virtual 키워드를 사용하여 선언된 함수입니다. 파생 클래스에서 이 가상 함수를 ..

Programming/C, C++ 2025.04.17

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 15 - 태스크 디스크립터(task_struct)

안녕하세요. 유저 프로세스와 커널 프로세스에 전반전 내용은 끝내고 이제 중요한 구조체 2개(태스크 디스크립터(task_struct 구조체), 스레드 정보(thread_info 구조체))를 확인하려고 합니다. 그중에 태스크 디스크립터(task_struct 구조체) 먼저 확인해 보겠습니다. 태스크 디스크립터(task_struct 구조체)에는 많은 필드가 있어서 책에서 소개하는 정도만 따라가 보겠습니다. struct task_struct 정의한 내용만 봐도 참 따라가기 쉽지 않겠구나 생각이 듭니다. 1. 프로세스 식별 필드 ps를 통해 systemd, kthreadd, rcu_gp 등 프로세스 이름을 확인할 수 있습니다. 이것은 task_struct의 comm 필드에 접근해서 가져옵니다. l..

IT/Linux Kernel 2025.04.15

[Tip] How to Display Double Quotes ("") in Mermaid Tool (diagrams and visualizations)

안녕하세요.   Mermaid라는 툴은 간단하게 여러가지 다이어그램을 그려주는 툴입니다. 이번에 툴 소개하는 것은 아니고 문자열에 큰 따옴표("")를 표기하는 방법을 알려주는 자료가 없어서 확인한 방법 공유해 보았습니다.  Hello, I recently discovered something while looking for a website to quickly draw diagrams and UML online, and I'd like to share it. Mermaid is a tool that allows you to easily draw various types of diagrams. The types of diagrams it supports include the following:  This ..

IT 2025.04.13

[C++] explicit에 대해 알아두면 좋은 읽을거리

안녕하세요.  C++를 사용하다 보면 "explicit" 키워드를 가끔 보게 됩니다. 이 키워드는 클래스 생성자의 동작 방식을 제어하는 중요한 역할을 하지만, 처음 접하는 분들에게는 다소 낯설게 느껴질 수 있습니다.  이번 내용은 C++의 "explicit" 문법에 대해 조금 알아보려고 합니다.  1. 암시적 형 변환 (Implicit Type Conversion)  "explicit" 키워드를 이해하기 위해서는 먼저 C++의 암시적 형 변환에 대한 이해가 필요합니다. C++에서는 컴파일러가 특정 상황에서 자동으로 자료형을 변환해 주는 암시적 형 변환이 일어납니다.  클래스 타입 인자가 하나인 생성자가 정의되어 있다면, 해당 생성자를 사용하여 다른 타입의 값을 클래스 타입으로 암시적으로 변환할 수 있습니..

Programming/C, C++ 2025.04.11

연봉 앞자리를 바꾸는 개발자 기술면접 노트, 독서 후기

안녕하세요.  1. 책 선택 이유  최근 경기가 어려워지면서 기업 파산, 구조조정, AI 도입 등으로 어려운 소식들이 나오면서 예전에도 생각했지만, 평생직장은 없겠구나 다시 생각이 들었습니다.  개발자, 기술직이라고 생각할 수 있지만, 이것 또한 잘못된 생각이라고 생각이 들었습니다. 시대를 알고, 준비 조금 하고 있어야 하지 않을까 해서 찾아보았습니다.  2. 간략한 내용 소개  합격하는 포트폴리오는 무엇이 다를까?기술 면접에서는 어떤 답변이 최선일까? 이 책은 저자가 SI 업체에서 빅테크 기업으로 이직한 경험과 쿠팡과 카카오 면접관으로 임하며 쌓은 인사이트를 바탕으로 IT 기업 취업과 이직 전략을 상세하게 다룬다. 지원자가 알고 있으면 도움이 될 지식과 정보를 면접관의 관점에서 카테고리별로 정리하였다...

Book Report 2025.04.10

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 14 - 커널 내부 프로세스 생성과 종료 과정

안녕하세요.   이전 내용에서는 유저프로세스, 커널 프로세스에 대해서 확인했습니다. 이번에는 이 내용을 간단히 정리하면서 나머지 부분을 확인합니다.  1. 프로세스 생성 과정 확인, _do_fork() 함수  유저 프로세스는 fork -> sys_clone -> _do_fork 흐름으로 호출했고, 커널 프로세스에서 kthread_create -> ... -> kthread 스레드 요청 -> ... -> _do_fork 흐름으로 프로세스를 생성했습니다.  최종적으로 동일하게 _do_fork() 함수를 호출했습니다.  _do_fork() 함수의 동작은 크게 두 단계로 볼 수 있습니다. 1단계는 프로세스 생성, 2단계는 프로세스의 실행요청으로 볼 수 있습니다. 1) _do_fork() 함수 소스코드 분석  한..

IT/Linux Kernel 2025.04.09

How to Resolve Warning Messages When Adding Header Files in Qt 6.8.1

Hello,  I'd like to share how to resolve the persistent warning messages that appear when adding header files while using Qt 6.8.1. 1. Warning Message Even when creating a basic Qt widget project, the following warning message appeared (with QMake configuration): D:\project\02_qt\01_error_test01\widget.cpp:2:warning: Included header ui_widget.h is not used directly (fix available)    I thought i..

Programming/Qt 2025.04.08

[C++] 가상 함수에서 조금 알아두면 좋은 간단한 읽을거리(vtable, pure virtual function 포함)

안녕하세요.  C++ 가상 함수에 대해서 조금 알아보려고 합니다. 뭐 virtual 만 붙이면 되는 거 아니야?라고 할 수 있지만, 간단한 원리, vtable 구조, 장단점 등을 조금 알아보겠습니다.  C++에서 가상 함수(virtual function)는 객체 지향 프로그래밍의 다형성(polymorphism)을 구현하는 핵심 개념입니다. 이를 통해 기본 클래스 포인터 또는 참조를 사용하더라도, 런타임에 실제 객체의 타입에 따라 적절한 함수가 호출되도록 만들 수 있습니다.   1. 가상 함수란? — 런타임 다형성의 시작  가상 함수는 기본 클래스에서 virtual 키워드로 선언되며, 파생 클래스에서 재정의(override)할 수 있습니다. 가상 함수 호출은 정적 바인딩(static binding)이 아닌..

Programming/C, C++ 2025.04.05