전체 글
-
행렬 곱은 함수의 합성이다.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..
-
[iOS-2] Dependency Container로 의존성 관리하기Project/TalkTalk 2025. 3. 31. 23:01
의존성 주입이란?의존성 주입(Dependency Injection)은 한 객체가 다른 객체에 의존할 때, 외부에서 해당 의존성을 제공하는 디자인 패턴이며 다음과 같은 이점을 가질 수 있습니다. 결합도 감소: 객체가 자신의 의존성을 직접 생성하지 않아 결합도가 낮아집니다.테스트 용이성: 실제 구현체 대신 테스트용 모의 객체를 주입할 수 있습니다.유연성: 런타임에 의존성을 변경할 수 있어 유연한 설계가 가능합니다.코드 재사용성: 의존성이 분리되어 컴포넌트의 재사용이 용이해집니다.예를 들어 네트워크 통신이 필요한 뷰모델이 있다고 할 때, 이 뷰모델은 네트워크 작업을 하는 객체를 내부에서 직접 생성하지 않고 뷰모델 객체가 생성되는 시점에 외부에서 주입받습니다. 좀더 자세히 설명해 보면 NetworkServic..
-
[Particle Simulator] cpu 연산 - gpu 랜더링 방법Apple🍎/Metal 2025. 3. 30. 22:47
1. Metal Setup 과정 GPU 자원 초기화 : 시스템의 GPU에 접근하기 위한 기본 자원을 설정, MTLCreateSystemDefaultDevice( )를 호출하여 기기의 GPU를 가리키는 참조를 얻습니다. 화면 표시 영역 준비 : GPU가 렌더링한 내용을 표시할 특수한 뷰(MTKView)를 생성, 해당 뷰는 앱의 기존 UI 계층 구조 내에 배치되어, GPU 렌더링 결과가 나타날 화면 영역을 정의렌더링 루프 설정 : 대리자 설정을 통해 렌더링 루프를 구성합니다. 이를 통해 화면이 새로고침될때마다 대리자 클래스의 draw( ) 메서드가 자동으로 호출하여 연속적인 프레임 렌더링이 가능해집니다. 렌더링 옵션 구성: framebufferOnly = false 와 같은 설정으로 렌더링 방식을 조정합니다..
-
Metal 렌더링 파이프라인Apple🍎/Metal 2025. 3. 29. 21:11
Metal 렌더링 파이프라인은 3D 그래픽을 2D 화면에 체계적으로 그리는 과정을 말합니다. 이 과정을 단계별로 자세히 알아보도록 합시다. 💡 글 이해를 위해 필요한 개념들 정점(Vertext) : 3D 공간상의 점으로, 3D 모델이나 그래픽을 구성하는 가장 기본적인 요소이며 다음과 같은 정보를 포합합니다. 위치(position): x, y, z 좌표로 3D 공간에서의 위치를 나타냅니다. 색상(Color) : 정점의 색상 정보입니다. 텍스쳐 좌표(texture coordinates): UV 좌표라고도 하며, 텍스쳐 이미지의 어느 부분이 해당 정점에 매핑될지를 결정합니다. 법선 벡터(normal vectors) : 정점에서의 표면 방향을 나타내느 벡터로, 조명 계산에 사용됩니다. 텍스쳐(Texture)..
-
[iOS-1] Coordinator 패턴을 사용한 화면 전환 관리Project/TalkTalk 2025. 3. 28. 22:03
Coordinator 패턴이란?Coordinator 패턴은 화면 전환 로직을 ViewController로부터 분리하여 별도의 객체(Coordinator)에게 위임하는 아키텍처 패턴입니다. 이 패턴을 통해 ViewController는 UI 표시와 사용자 입력 처리에만 집중할 수 있고, 복잡한 화면 전환과 앱의 전체 흐름은 Coordinator가 관리하게 됩니다.Coordinator 패턴 구현 Coordinator 프로토콜을 정의하여 각 화면을 관리하는 Coordinator들이 반드시 포함해야할 구현을 강제합니다. /// Coordinator 패턴을 구현하기 위한 기본 프로토콜/// 앱의 화면 흐름을 관리하고 뷰 컨트롤러 간 전환 로직을 캡슐화합니다.protocol Coordinator: AnyObject ..
-
CPU와 GPU 비교와 GPGPU 프로그래밍의 이해Apple🍎/Metal 2025. 3. 27. 21:33
CPU와 GPU의 기본 구조와 연산 방식CPU (중앙처리장치)의 구조와 작동 원리CPU는 컴퓨터의 '두뇌'로 불리며, 몇 개의 강력한 코어로 구성되어 있습니다. 전통적인 CPU는 4~16개 정도의 코어를 가지고 있으며, 각 코어는 복잡한 명령어를 처리할 수 있는 고성능 연산 유닛입니다.CPU의 주요 특징직렬 처리(Serial Processing): 하나의 코어는 기본적으로 한 번에 하나의 작업을 순차적으로 처리합니다.복잡한 제어 로직: 분기 예측(Branch Prediction), 명령어 파이프라이닝(Instruction Pipelining), 비순차적 실행(Out-of-Order Execution) 등 복잡한 제어 로직을 갖추고 있습니다.대용량 캐시 메모리: L1, L2, L3 등 여러 계층의 캐시를 ..
-
GCD vs async/await 제대로 알기Apple🍎/Cocurrency 2025. 3. 26. 22:49
Swift에서는 비동기를 처리하는 방법은 크게GCD(Grand Central Dispatch)를 이용하는 방식과 새로 도입된 async/await를 이용하는 법이 있습니다. 하지만 각 방식에 대한 설명들이 너무 추상적이거나 모호하고 중간 과정들이 생략된 경우가 많아서명확한 동작에 대한 이해가 어려웠습니다. 그래서 직접 각 방법들의 과정들을 자세하게 분석해서 비동기 처리에 대한 껄끄러운 느낌을 없애보도록 하겠습니다. GCD 방식 GCD 방식에서는 비동기 동작을 위해서 DispatchQueue에 async 방식으로 작업을 예약합니다. 네트워크 요청이나 파일 IO등 처리 시간이 오래 걸리는 작업들을 global 큐에 넘겨버림으로써메인 쓰레드의 계속된 작동을 보장하기 위해 주로 사용합니다. ( 화면 드로잉 싸..