Programming🧑💻
-
가상 함수와 함수 호출 방식( 정적 디스패칭, 동적 디스패칭)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..
-
static 키워드 정복하기Programming🧑💻 2025. 3. 25. 21:08
Swift에서 static 키워드는 "프로퍼티를 인스턴스가 아닌 타입 레벨로 올림으로써 타입 내에서 공유하는 속성,기능을 만들 수 있게 해 준다. " 라고 이해하고 있었으며 주로 싱글톤 패턴이나 타입 메서드를 구현할 때 사용했습니다. 따라서 static 키워드를 "타입 레벨의 동작을 지원하기 위해 만들어진 녀석이구나" 정도로 이해하고 있었습니다. 근데 thread-safe 코드 작성에 대해 살펴보기에 앞서 thread-unsafe 한 경우가 무엇이 있는지에 대해 보고 있던 와중에 "정적 지역 변수는 함수 내에 있더라도 data 영역에 저장이 되며 함수의 반환 이후에도 함수의 상태를 기억한다. 즉 여러 쓰레드에서 접근이 가능한 공유 자원으로 취급되기 때문에 주의가 필요하다." 라는 구절을 읽었습니다.그..
-
함수형 프로그래밍이 선언적인 이유Programming🧑💻/Functional Programming 2025. 2. 17. 22:49
SwiftUI와 UIKit 뷰 구성하는 법 비교하기 ( 선언형, 절차형 패러다임 비교)SwiftUI - 선언형 프로그래밍선언형 프로그래밍에서는 "무엇"을 원하는지를 코드로 작성합니다.개발자는 원하는 결과를 설명하고, 시스템이 그 결과를 어떻게 달성할지 결정합니다.SwiftUI 예제다people-analysis.tistory.com이전에 SwiftUI와 UIKit에서 뷰를 구성하는 방법을 비교하면서 선언적 프로그래밍과 함수형 프로그래밍을 서로 비교해 봤는데요. 최근에 함수형 프로그래밍을 접하면서 함수를 이용해 값의 입력과 출력을 다루는 게 마치 SwiftUI에서 값 변경을 감지해 이를 화면에 반영하는 뷰 랜더링 사이클과 비슷하다는 느낌이 들었습니다.그래서 함수형 프로그래밍이 왜 '선언적'이라고 불리는지, ..
-
상태기계와 코루틴 프레임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..