전체 글
-
SwiftUI 멀티 플렛폼 Navigation 아키텍쳐 설계 (Coordinator 야 저리 가라)Apple🍎/SwiftUI 2025. 4. 8. 17:23
UIKit에서 Coordinator 패턴이 등장한 배경UIKit 개발에서 Coordinator 패턴은 앱의 화면 전환 흐름을 관리하는 문제를 해결하기 위해 등장했습니다. 이 패턴이 필요했던 주요 이유들은 다음과 같습니다.1. 뷰 컨트롤러의 과도한 책임 분산UIKit의 기본 구조에서는 화면 전환 로직이 주로 뷰 컨트롤러 내부에 위치했습니다.class ProfileViewController: UIViewController { func showSettings() { let settingsVC = SettingsViewController() settingsVC.user = self.user self.navigationController?.pushViewControlle..
-
가상 함수와 함수 호출 방식( 정적 디스패칭, 동적 디스패칭)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..
-
Metal-Cpp : C++ 개발자를 위한 Apple의 GPU 사용법Apple🍎/Metal 2025. 4. 3. 23:03
Metal 둘러보기셰이더(shader)는 무엇인가?다음은 애플 디벨로퍼 홈페이지에 있는 Metal 의 소개입니다. 일단 Metal 을 사용하면 GPU 프로그래밍을 가능하게 해준다고는 들었는데, 셰이딩 언어는 또 뭘까요? 사실 GPpeople-analysis.tistory.comMetal 소개: Apple 플랫폼의 그래픽 및 컴퓨팅 프레임워크Metal은 Apple이 개발한 저수준 그래픽 및 컴퓨팅 API로, iOS, macOS, tvOS 등 Apple 플랫폼에서 GPU의 강력한 성능을 활용할 수 있게 해줍니다. 2014년에 처음 소개된 Metal은 OpenGL보다 더 낮은 오버헤드와 더 높은 성능을 제공하기 위해 설계되었습니다.Metal의 주요 특징은 다음과 같습니다. 그래픽 렌더링 및 일반 컴퓨팅(GPG..
-
행렬 곱은 함수의 합성이다.Math♾️/Linear Algebra 2025. 4. 2. 10:45
선형 변환 : 행렬은 함수다.선형 변환이란 무엇인가? 먼저 '변환(transformation)'라는 용어부터 이해해볼까요? 변환은 사실 함수(function)의 또 다른 표현일 뿐입니다. 함수는 입력 값과 출력 값간의 관계를 정의합니다. 따라서people-analysis.tistory.com선형 변환의 기본 개념 복습지난 글에서 선형 변환은 "벡터를 입력으로 받아 벡터를 출력으로 내놓은 함수 일종의 함수"라고 했습니다. 또한 '선형' 변환은 다음과 같은 특성을 가진 공간의 '변형'으로도 생각할 수 있습니다. 격자선(그리드 라인)이 평행을 유지합니다.격자선 사이의 간격이 균일하게 유지됩니다.원점(0,0)은 항상 고정된 상태로 유지됩니다.이러한 특성은 선형 변환이 공간 전체를 일관된 방식으로 변형시킨다는 것..
-
[Particle Simulator] Compute Shader 사용해 gpu 연산하기Apple🍎/Metal 2025. 4. 1. 22:45
[Particle Simulator] cpu 연산 - gpu 랜더링 방법1. Metal Setup 과정 GPU 자원 초기화 : 시스템의 GPU에 접근하기 위한 기본 자원을 설정, MTLCreateSystemDefaultDevice( )를 호출하여 기기의 GPU를 가리키는 참조를 얻습니다. 화면 표시 영역 준비 : GPU가 렌people-analysis.tistory.com기존 CPU 기반 구현의 한계지난 글에서는 입자 시뮬레이션을 위해 프레임마다 각 입자에 대한 계산을 cpu에서 실행하고 그 결과를 gpu를 통해 렌더링하는 방식을 사용했습니다. private func updateSandSimulation() { // 아래에서 위로 순회 (중력 방향을 고려) for y in (0..= gridH..