전체 글 116

의존성 주입

1. 의존성 주입 패턴의 기본 개념정의:의존성 주입은 클래스가 스스로 필요한 의존 객체(서비스, 컴포넌트 등)를 생성하지 않고, 외부에서 주입받아 사용하는 디자인 패턴입니다. 이를 통해 객체 생성과 사용을 분리하여, 클래스 간 구체적 의존을 줄이고, 유연성과 테스트 용이성을 높일 수 있습니다.IoC(Inversion of Control):의존성 주입은 제어의 역전 원칙에 기반합니다. 즉, 객체의 생성과 의존성 관리의 책임을 애플리케이션 코드가 아니라 외부 컨테이너나 프레임워크가 맡습니다.2. 의존성 주입의 주요 방식2.1 생성자 주입설명:클래스의 생성자를 통해 필요한 의존성을 전달받습니다.장점:불변성을 보장하고, 클래스 생성 시 모든 필수 의존성이 명시됨변경 시에도 객체 생성 자체가 책임지므로, 안정성이..

디자인 패턴 2025.04.08

매트릭, 커네이선스, 트레이드 오프

1. 매트릭 (Metrics)정의 및 역할매트릭은 소프트웨어나 시스템의 여러 측면(품질, 성능, 복잡도 등)을 수치적 또는 정량적으로 평가하기 위한 지표입니다.코드 품질, 유지 보수성, 성능, 복잡도 등을 객관적으로 평가할 수 있도록 도와주며, 아키텍트는 이 데이터를 기반으로 설계 개선이나 리팩토링 결정을 내립니다.주요 종류 및 예시코드 복잡도 지표:Cyclomatic Complexity (순환 복잡도): 소스 코드 내 의사 결정 분기(조건문, 반복문 등)의 수를 측정하여, 코드의 복잡도를 평가합니다. 복잡도가 높으면 테스트와 유지 보수가 어려워질 수 있습니다.품질 및 결함 지표:버그 밀도: 릴리즈된 코드 내 버그의 수를 측정합니다.커버리지: 단위 테스트나 통합 테스트가 전체 코드의 몇 퍼센트를 검증하는..

아키텍처 2025.04.08

STL 사용의 장점

추상화와 일관성STL은 다양한 컨테이너(vector, list, set 등)와 알고리즘(sort, find, for_each 등)을 표준화된 인터페이스로 제공하여, 특정 컨테이너의 내부 구현 세부 사항에 의존하지 않고 일관되게 코드를 작성할 수 있습니다.반복자(iterator) 사용의 장점반복자는 컨테이너의 내부 구조를 감추고 공통된 방식으로 접근할 수 있게 해줍니다. 이를 통해 컨테이너 종류에 상관없이 동일한 방식으로 원소를 순회할 수 있으며, 반복자 덕분에 알고리즘이 컨테이너와 독립적으로 작동할 수 있습니다.C++11부터는 범위 기반 for문을 사용할 수 있어, 반복자 사용을 더욱 간편하게 만들고 코드 가독성을 크게 향상시킵니다.알고리즘과의 결합STL 알고리즘은 반복자와 결합되어 작성되므로, 반복문 ..

C++ 2025.03.09

SDP

개요목적: SDP는 멀티미디어 세션의 정보를 기술하는 데 사용됩니다.예를 들어, 어떤 미디어 스트림이 존재하는지, 미디어 유형, 포맷, 전송 프로토콜, 네트워크 연결 정보 등을 기술합니다.표준: RFC 4566에서 정의됩니다.특징: 텍스트 기반의 간단한 포맷으로, 사람이 읽기 쉽고 기계가 파싱하기도 용이합니다.SDP 메시지 구성SDP 메시지는 여러 개의 줄로 구성되며, 각 줄은 한 개의 문자(식별자)와 등호(=)로 시작한 뒤, 해당 값이 옵니다. 각 줄은 CRLF로 종료됩니다.주요 필드는 다음과 같습니다:v= (버전)SDP 버전을 나타내며, 현재는 v=0이 사용됩니다.o= (Origin)세션 생성자 및 세션 식별 정보를 포함합니다.형식:o= 예시: o=- 0 0 IN IP4 127.0.0.1  s..

네트워크 2025.02.04

RTSP

RTSP (Real Time Streaming Protocol)개요목적: RTSP는 클라이언트가 스트리밍 미디어 서버와 상호작용하면서 재생, 일시정지, 중지 등 스트리밍 제어 기능을 수행할 수 있도록 설계된 프로토콜입니다.역할: 미디어 스트림(영상, 오디오 등)의 제어 명령을 전송하며, 실제 데이터 전송(RTP/UDP 등)은 별도의 채널에서 이루어집니다.표준:RTSP/1.0: RFC 2326에 정의되어 있으며, 가장 널리 알려진 버전입니다.RTSP/2.0: RFC 7826에 정의되어 있으며, 일부 기능이 개선되었지만 기본 개념은 유사합니다.메시지 형식RTSP 메시지는 HTTP와 유사한 텍스트 기반 메시지 형식을 따릅니다.요청 메시지 (Request Message)요청 라인:METHOD RTSP/1.0\..

네트워크 2025.02.04

DC

WinAPI의 DC(Device Context)는 그래픽 출력 및 장치와의 상호작용을 위한 중요한 개념입니다. DC는 Windows의 GDI(Graphics Device Interface)에서 화면, 프린터, 메모리 비트맵 등 그래픽 출력 장치와 통신하는 데 사용되는 구조체입니다. DC는 그래픽 객체 및 그들의 속성, 그리고 출력 설정을 포함합니다.화면 출력에 필요한 모든 정보를 가지는 데이터 구조, GDI 모듈에 의해서 관리된다.DC의 주요 특징그래픽 출력 대상 관리DC는 출력 장치(화면, 프린터, 메모리)를 지정하고, 해당 장치로 그래픽을 그릴 때 사용하는 매개체입니다.속성 및 상태 저장DC는 색상, 브러시, 펜, 폰트, 배경 색상 등과 같은 그래픽 속성을 저장합니다. 이러한 속성을 설정하고, GDI..

3D Rendering 2024.12.31

const 변수에 대한 최적화

1. 불변성 기반 최적화const 변수는 선언 이후 값이 변경되지 않는다는 점을 컴파일러가 확실히 알고 있습니다. 이 정보를 바탕으로 컴파일러는 다음과 같은 최적화를 수행할 수 있습니다.1-1. 값의 인라인화const 변수는 값이 불변이므로, 컴파일러는 변수 대신 그 값을 코드에 직접 인라인할 수 있습니다. 이를 통해 변수를 참조하는 과정이 제거되어 런타임 성능이 향상됩니다.예시 코드:const int VALUE = 10;void printValue() { std::cout const int VALUE = 10; void printValue() { std::cout 컴파일 결과 (최적화 적용):mov eax, 10 ; VALUE의 값이 바로 사용됨call _ZNSolsEi ; std::cout에..

C++ 2024.12.17

const 변수와 일반 변수

1. const 메모리const는 특정 변수를 변경할 수 없도록 선언할 때 사용됩니다. 이를 통해 메모리 영역에 저장된 값은 변할 수 없으며, 코드의 안전성을 높이고 프로그램 오류를 줄일 수 있습니다.특징:컴파일 타임에 값이 고정될 수 있다const 변수는 컴파일러가 해석하여 상수처럼 취급될 수 있습니다. 최적화 단계에서 const 값은 코드에 직접 인라인될 수 있습니다.읽기 전용메모리 위치에 접근할 수 있지만 값을 변경할 수 없습니다. 변경 시 컴파일 오류가 발생합니다.런타임에 값이 결정될 수 있음반드시 모든 const 변수가 컴파일 타임 상수는 아닙니다. 런타임에 초기화된 const 변수도 존재할 수 있습니다.예시:const int x = 10; // 컴파일 타임 상수int y = 20;const i..

C++ 2024.12.17

Forward vs Deferred

1. Forward 렌더링: 객체 단위로 조명 연산Forward 렌더링에서는 각 **객체(Object)**를 그릴 때마다 해당 픽셀에 영향을 주는 모든 조명을 한 번에 계산합니다. 즉:각 오브젝트(메시)를 Draw Call 단위로 그립니다.각 픽셀에서 모든 조명을 계산합니다. (여러 조명이 있는 경우, 각 픽셀에서 반복적으로 조명 연산이 발생)조명 연산 갯수의 증가 이유Forward 렌더링은 객체 단위로 조명을 처리하기 때문에 다음과 같은 문제가 발생합니다:여러 조명이 하나의 객체에 동시에 영향을 미치는 경우, 각 픽셀마다 조명 계산이 중첩됩니다.조명의 수가 증가하면 라이팅 연산이 선형적으로 증가합니다.화면에 보이지 않는 픽셀까지도 조명 연산이 수행될 수 있어 낭비가 심합니다.Forward 렌더링의 라이..

3D Rendering 2024.12.17