Programming🧑💻/Cpp
-
가상 함수와 함수 호출 방식( 정적 디스패칭, 동적 디스패칭)Programming🧑💻/Cpp 2025. 4. 7. 16:38
가상 함수(Virtual Function)의 개념과 작동 원리가상 함수는 객체 지향 프로그래밍의 정수인 다형성(polymorphism)을 구현하는 핵심 메커니즘입니다. 쉽게 말해서, 가상 함수는 부모 클래스에서 선언되고 자식 클래스에서 재정의(override)될 수 있는 함수입니다.1. 가상 함수의 기본 개념C++에서 함수 앞에 virtual 키워드를 붙이면 그 함수는 가상 함수가 됩니다.class Parent {public: virtual void show() { std::cout 여기서 Parent 클래스의 show() 함수는 virtual 키워드로 선언되었고, Child 클래스에서 이를 재정의했습니다. override 키워드는 C++11에서 추가된 것으로, 이 함수가 부모 클래스의..
-
const 키워드 맥락에 따라 구분하기Programming🧑💻/Cpp 2025. 4. 6. 21:06
const 키워드는 C++에서 매우 중요한 개념으로, 코드의 안정성과 가독성을 높이는 데 큰 역할을 합니다. 하지만 다양한 상황에서 활용되기 때문에 언어에 익숙하지 않은 경우, 맥락에 따른 의미를 파악하기 어려울 수 있습다. 이번 글에서는 다양한 곳에서 cosnt가 어떻게 활용되는지 살펴보도록 하겠습니다. 1. 상수 변수 선언가장 기본적인 const 사용법은 변수를 상수로 선언하는 것입니다.const int MAX_USERS = 100;const double PI = 3.14159265359;이렇게 선언된 변수는 초기화 후 값을 변경할 수 없습니다.2. 포인터와 constconst와 포인터를 함께 사용할 때는 두 가지 경우가 있습니다. const 키워드는 자신의 왼쪽에 있는 것을 상수로 만듭니다. 하지만..
-
inline 키워드 알아보기Programming🧑💻/Cpp 2025. 4. 5. 20:51
C언어에서의 시작inline 키워드는 원래 C89 표준에는 없었고 C99에서 추가되었습니다. 그러나 그 이전에도 많은 C 컴파일러들은 비표준 확장 기능으로 이를 지원했습니다. 처음에 inline의 주요 목적은 컴파일러에게 힌트를 제공하는 것이었습니다. 이 힌트는 "이 함수를 호출할 때마다 함수 호출 메커니즘을 사용하지 말고, 함수 코드를 직접 호출 지점에 삽입해 달라"는 의미였습니다.inline int square(int x) { return x * x;}이렇게 정의된 함수는 컴파일러가 다음과 같이 변환하기를 기대했습니다.// 원래 코드int result = square(5);// 컴파일러가 변환한 코드 (개념적으로)int result = 5 * 5;C++로의 발전C++에서 inline의 의미는 상..
-
헤더 전용 라이브러리는 뭐고 언제 쓸까?Programming🧑💻/Cpp 2025. 4. 4. 21:38
헤더 전용 라이브러리란 무엇인가?헤더 전용 라이브러리는 단어 그대로 헤더 파일만으로 구성된 라이브러리입니다.일반적인 라이브러리들이 헤더 파일(.h, .hpp)과 구현 파일(.c, .cpp)로 나뉘어 있는 것과 달리, 헤더 전용 라이브러리는 모든 코드가 헤더 파일 안에 담겨 있습니다. 전통적인 라이브러리 방식 : 이 방식에서는 선언과 구현이 분리되어 있습니다.calculator.h (선언부)#ifndef CALCULATOR_H#define CALCULATOR_H// 함수 선언int add(int a, int b);int subtract(int a, int b);double divide(double a, double b);int multiply(int a, int b);// 클래스 선언class Calcul..
-
상태기계와 코루틴 프레임Programming🧑💻/Cpp 2025. 2. 14. 22:40
코루틴이란?일반적인 함수의 경우 한번 호출되면 완료될때까지 실행되지만 코루틴은 실행 중간에 중단되었다가 나중에 중단됨 지점부터 다시 재개될 수 있는 함수입니다. 상태기계 (State Machine)상태기계는 코루틴이 어떻게 함수의 실행을 중단했다가 다시 재개할 수 있는지를 설명하는 핵심 매커니즘입니다. 컴파일러는 코루틴 함수를 상태기계로 변화하는 과정을 거칩니다. 예를 들어, 다음과 같은 코루틴이 있다고 가정했을 때, task example_coroutine() { std::cout 컴파일러는 이 코드를 내부적으로 다음과 같은 상태들을 가진 상태 기계로 변환합니다. // 컴파일러가 생성하는 내부적인 상태 기계의 의사 코드class ExampleCoroutineStateMachine { // ..
-
서브 루틴과 코루틴Programming🧑💻/Cpp 2025. 2. 13. 20:05
루틴이란?프로그래밍에서 루틴은 프로그램의 실행흐름을 의미합니다. 모든 프로그램은 하나 이상의 루틴으로 구성되어 있으며, 이러한 루틴들이 어떻게 상호작용하는지에 따라 프로그램의 동작이 결정됩니다. 서브 루틴 (subroutine)서브 루틴은 가장 일반적인 프로그램 실행 흐름의 형태입니다. 계층적 구조 : 서브루틴은 호출자-피호출자의 명확한 계층 관계를 가집니다. 메인 함수가 서브루틴을 호출하면, 서브 루틴은 메인함수에 종속됩니다. .단방향 제어 흐름 : 제어 흐름이 항상 호출자에서 피호출자로 전달되며, 작업이 완료되면 다시 호출자로 돌아옵니다. 동기적 실행 : 서브루틴이 실행되는 동안 호출자는 대기 상태가 되며, 서브 루틴이 완료될때까지 다음 작업을 수행할 수 없습니다. def sub(): print..
-
Macro가 뭘까?Programming🧑💻/Cpp 2025. 2. 12. 15:36
매크로는 전처리기에게 "이 텍스트를 저 텍스트로 바꿔주세요"라고 지시하는 일종의 치환 규칙입니다.메크로 기본 개념 가장 단순한 형태의 메크로는 #define을 사용한 상수 정의입니다. #define PI 3.14159#define MAX_STUDENTS 30int main() { double circle_area = PI * radius * radius; // 컴파일 전에 PI가 3.14159로 치환됨 int students[MAX_STUDENTS]; // MAX_STUDENTS는 30으로 치환됨} 여기서 중요한 것은 메크로가 동작하는 시점입니다. 컴파일러가 코드를 컴파일하기 전에, 전처리기가 먼저 모든 메크로를 치환합니다.위 코드는 전처리 후에 다음과 같이 변합니다. int main() ..
-
빌드 과정과 #include의 역할 이해하기Programming🧑💻/Cpp 2025. 2. 12. 14:52
빌드 과정 이해하기 cpp 프로그램이 실행 파일이 되기까지는 크게 세 단계를 거칩니다. 1. 전처리(Preprocessing) 단계전처리기는 실제 컴파일이 시작되기 전에 소스 코드를 다듬는 작업을 수행합니다. #으로 시작하는 모든 지시문(#include, #define 등)을 처리하는 것이 바로 이 단계입니다. 이때 #include 지시문을 만나면, 해당 파일의 내용을 그 자리에 그대로 복사해 넣습니다.2. 컴파일(Compilation) 단계전처리된 소스 코드를 기계어로 변환하는 단계입니다. 각각의 .cpp 파일은 독립적으로 컴파일되어 목적 파일(.obj 또는 .o)이 됩니다.3. 링크(Linking) 단계여러 개의 목적 파일들을 하나로 모아서 실행 파일을 만드는 단계입니다. 각 파일에서 사용된 함수나 ..