Programming🧑💻
-
함수형 프로그래밍이 선언적인 이유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..
-
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) 단계여러 개의 목적 파일들을 하나로 모아서 실행 파일을 만드는 단계입니다. 각 파일에서 사용된 함수나 ..
-
헤더파일은 뭐고 왜 필요한가?Programming🧑💻/Cpp 2025. 2. 12. 14:17
헤더 파일의 기본 개념 헤더 파일은 간단히 말해서 선언(Declaration)을 포함하는 파일입니다. 여기서 선언이란 "이런 것들이 어딘가에 있을 것이다."라고 컴파일러에게 알려주는 것을 의미합니다.예를 들어, 다음과 같은 함수 선언은 "이런 함수가 어딘가에 있을 것이다."라고 알려주는 것입니다. // math.h#ifndef MATH_H#define MATH_Hint calculateSum(int a, int b);#endif 반면, 구현(Implementation)은 실제로 그 함수가 어떻게 동작하는지를 정의하는 것입니다. // math.cpp#include "math.h"int calculateSum(int a, int b) { return a + b;} 위에서 정의한 헤더파일과 cpp 파일은..
-
순수 함수란?Programming🧑💻/Functional Programming 2025. 2. 10. 23:22
수학에서 f(x) = x + 1 같이 함수는 x에 특정 값을 넣으면 항상 동일한 결과가 나옵니다. 프로그래밍에서 순수 함수도 이와 같은 원칙을 따릅니다. 항상 단일 값을 반환합니다 (동일한 입력에 대해 동이한 출력 반환)반환 값은 오직 입력 매개변수에만 기반하여 계산됩니다기존 값을 변경하거나 부작용을 일으키지 않습니다위의 원칙들을 따르면서 나타나는 다음 특성들 때문에 이를 '순수'하다고 합니다 입력과 출력의 관계가 순수하게 유지됩니다 (같은 입력 = 같은 출력)외부 세계와의 상호작용 없이 순수하게 계산만 수행합니다부작용 없이 순수하게 자신의 역할만 수행합니다 순수함수가 왜 필요한데?전통적인 클래스 기반 접근 방식의 문제점장바구니에 책이 포함되어 있을 때 할인을 해주는 비즈니스 로직을 구현한다고 해봅시다...
-
함수야 거짓말 하지마라Programming🧑💻/Functional Programming 2025. 2. 9. 23:07
함수 시그니쳐란? 함수 시그니쳐는 함수의 정체성을 나타내는 ID 카드와 같습니다. 함수의 이름, 매개변수 타입, 반환 타입을 포함하며,이를 통해 함수가 무엇을 받아서 무엇을 돌려주는지를 명확하게 알 수 있어야합니다. func functionName(parameterName: ParameterType) -> ReturnType { // 함수 구현}예를 들어, 사용자의 나이를 받아서 성인 여부를 반환하는 함수의 시그니처는 이렇게 됩니다func isAdult(age: Int) -> Bool { return age >= 18}위와 같이 함수의 시그니쳐들을 통해 해당 함수가 어떤 "역할을 하는지?" ,"어떤 값들을 필요로 하는지?", "어떤 결과값이 나올 수 있는지?"등의 함수의 동작을 예측할 수 있어..