칸반 보드 (Kanban Board)
칸반 보드는 팀의 작업이나 업무에 대해 시각화하고 진행 중인 작업을 파악하여 효율성을 높이는 프로젝트 관리 방식입니다.칸반 보드는 시각적 프로젝트 관리의 한 형태이며 애자일 방식의 프로젝트 관리 모델입니다. 작업 항목 표현을 위해 카드들을 사용하고 각 프로세스 단계를 표현하기 위해 단계를 구분하여 프로세스의 일을 시각적으로 표현합니다. 카드는 왼쪽에서 오른쪽으로 움직여 진행상황을 표현하고 작업을 수행하는 팀의 조율을 합니다. 칸반보드의 요소칸반 보드는 시각적 신호, 열, 진행중인 작업 제한, 이행 약속 시점 및 배포 시점까지 총 5가지 구성요소로 나눌 수 있습니다. 시각적 신호 : 하나의 시각적 카드 입니다.열: 특정 활동을 나타내는 열이며, 이 열들이 모여 워크 플로우를 구성합니다.WIP(진행 중인 작..
DirectX 11 - 스터디 03
윈도우 창의 사이즈는 실제로 설정해 준 값에서 약간 줄어든 값을 가지고 생성됩니다, 그 이유는 윈도우와 같이 생성된 타이틀 바의 크기나 미세하게 보이는 옆 테두리 같은 부분이 화면 크기에 포함되기 때문인데 이러한 현상에 대해서 정확하게 윈도우의 크기를 조절할 때에는 `AdjustwindowRect()` 함수를 사용합니다.Scalar processing초기에는 32비트 레지스터를 사용해 메모리의 데이터를 하나씩 처리하는 방식이 알반적이었지만, 이후 128비트 레지스터가 도입되면서 기존에 32비트 연산을 4번 반복해야 처리할 수 있었던 작업을 한 번에 병렬 처리를 할 수 있게 되었습니다. 이러한 하드웨어 발전으로 SIMD, SISD, MISD, MIMD와 같은 병렬 처리 모델이 정의되고 활용되기 시작합니다...
lvalue, rvalue
lvalue, rvaluelvalue는 메모리 주소를 가지고 있는 값이며 예시로 변수나 배열 요소 등이 있습니다. 메모리 주소를 가지고 있기에 참조할 수 있고 어떤 객체나 변수에 대입의 왼쪽으로 올 수 있는 값을 의미합니다. 스택, 힙, 정적 메모리 등 객체가 존재하는 메모리 영역에 저장됩니다. rvalue는 일시적인 값이나 메모리 주소를 가지고 있지 않은 값들을 의미하며 식이 끝나면 소멸되는 값들을 의미합니다. 메모리 주소가 없기에 대입문의 오른쪽에만 올 수 있는 값들을 의미합니다, 일반적으로 메모리 주소를 직접적으로 가질 수는 없습니다. 모든 lvalue는 rvalue가 될 수 있지만 모든 rvalue는 lvalue가 될 수 없다고 하며, 그 이유로는 당연히 rvalue는 메모리 주소를 가지지 않는..
DirectX 11 - 스터디 01
첫 번째 시간에는 기본적으로 다이렉트 X가 어떤 식으로 그래픽스를 모니터에 출력하고 기본적으로 어떠한 랜더링 방식을 가지고 있는지 알 수 있었다. 코드로 작성된 셰이더와 데이터뿐인 리소스를 사용해서 근본적으로 그래픽스 출력의 방식을 다시 보자.Resource (리소스)다이렉트 X에서의 리소스는 버퍼 혹은 텍스쳐 두 가지 중 하나를 형태를 가지고 있으며 Direct3D에서 GPU가 사용할 데이터이며 셰이더나 GPU가 그릴 대상에 필요한 정보를 가지고 있는 모음입니다. 리소스는 모든 정보를 리소스에게 넘겨 해당 점보를 가지고 그래픽을 렌더링 할 수 있게 합니다.Shader (셰이더)픽셀 색상을 계산하거나 변환 등을 수행하며 GPU에서 그래픽을 그릴 때 실행되는 작은 프로그램이라고 볼 수 있습니다. 리소스가..
Buffer
Direct X에서의 버퍼(Buffer)는 형식화된 데이터의 컬렉션입니다. GPU에 전달할 데이터를 임시로 저장해 두는 메모리 공간이며 CPU가 GPU에게 건네주는 데이터 모음이라고 볼 수 있습니다. 버퍼를 사용하여 위치 벡터나 일반 벡터, 버텍스 버퍼의 텍스쳐 좌표, 인덱스 버퍼의 인덱스 또는 디바이스 상태를 비롯한 다양한 데이터를 저장할 수 있습니다. 다이렉트 X에서는 보통 `ID3D1Buffer` 인터페이스에 의해 캡슐화되어 있습니다.Vertex BufferVertex Buffer에는 3D 버텍스, 즉 3D 정점을 지정하는데 필요한 데이터가 포함되어 있습니다. 정점의 위치 좌표나 정점의 색상과 같은 데이터를 가지고 있으며 , 삼각형이나 사각형 같은 도형을 그려낼때 사용하게 됩니다.버텍스 버퍼는 `I..
RTTI (Run-Time Type Information)
RTTI (Run-Time Type Information)런타임 타입 정보(RTTI, Run-Time Type Information)는 런타임 시 객체의 자료형에 관한 정보를 드러내는 C++ 키워드 중 하나이며 RTTI 안에는 `typeid`나`typeinfo`가 들어있습니다. 해당 객체가 실제로 어떤 자료형을 가지고 있는지 알 수 있으며 런타임 중 `dynamic_cast ` 연산 시 안전한 형 변환을 위해서 사용됩니다.RTTI는 오직 다형성을 가지고 있는 클래스들에 사용이 가능하기에 클래스 내부에 가상함수가 하나라도 있어야만 클래스 내부에 생성되게 가상 소멸자를 사용하는 경우도 있습니다. 또한 최적화나 리소스 비용 절약을 위해서 RTTI를 의도적으로 생성하지 않거나 지울 수도 있습니다. typeidR..
Device
DeviceDevice는 GPU(그래픽 카드)를 추상화한 API 객체이며, DirectX에서 GPU가 할 수 있는 기능을 사용자가 접근할 수 있도록 도와주는 인터페이스입니다. Direct3D 11 기준으로 `D3D11CreateDevice`를 호출해서 생성할 수 있습니다.ID3D11Device* device = nullptr;ID3D11DeviceContext* context = nullptrD3D11CreateDevice( nullptr, // 기본 어댑터 D3D_DRIVER-TYPE_HARDWARE, // GPU 사용 nullptr, 0, nullptr, 0, D3D11_SDK_VERSION, &device, // 디바이스 생성 nullptr,..
Dead Lock ( 교착 상태 )
교착 상태란 여러 프로세스나 스레드가 자원을 요청할 때 발생할 수 있는 문제입니다. 각 프로세스가 다른 프로세스가 보유한 자원을 기다리면서, 그 자원들이 동시에 다른 프로세스에 의해 요구되어 아무도 진행하지 못하고 영원히 기다리는 상태를 말합니다. 흔히 다중프로세스나 다중스레드에 발생할 수 있는 문제이며 이 교착 상태가 발생할 수 있는 조건은 다음과 같이 있습니다.상호배제 : 하나의 자원을 동시에 하나의 프로세스만 사용할 수 있어야 한다.점유대기 : 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 요구하고 있습니다.비선점 : 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없어야 합니다.환형대기 : 각 프로세스는 원을 그리며 다음 프로세스가 요구..
Hash Code (해시 코드)
해시 코드란 객체의 주소 값을 이용해서 해싱(hashing) 기법을 통해 해시 코드라는것을 만들며 주소값으로 만든 고유한 숫자값이라고 볼 수 있습니다. 해시 코드는 해시 테이블이라는 자료구조에 사용되며, 매우 빠른 데이터 검색을 위해 컴퓨터 소프트웨어에 널리 사용됩니다. 해시 코드는 큰 파일에서 중복되는 값을 빠르게 찾을 수 있기 때문에 자주 사용됩니다.Hash Table (해시 테이블)해시 테이블은 키(key)를 값(Value)에 매핑하여 사용하는 자료 구조중 하나 입니다. 즉, 키에 해당 하는 값을 찾기 위해 빠른 속도로 키를 검색할 수 있는 자료구조를 의미합니다. 사용할 값에 대해 중복되지 않는 유일한 키 값과 매핑을 시켜 후에 해당 값을 사용할때에 해시 테이블을 1번만 수행하면 되므로 빠르게 데이..
Process & Thread(프로세스 & 스레드)
컴퓨터에 조금이라도 관심이 있다면 들어볼법한 단어인 프로세스와 스레드는 컴퓨터 운영 체제에서 중요하게 사용되고 있습니다. 여기서 한가지 더 `.exe` 확장자로 되어 실행하는 파일을 프로그램이라고 부르기도 하는데 이 3가지 개념에 대해서 정리해보겠습니다.,Program프로그램은 흔히 말해 컴퓨터에서 실행 할 수 있는 파일을 말하며 일상 생활에도 많이 사용되는 카카오톡이나, 엑셀과 같은 파일들을 프로그램이라고 불리고 있습니다. 프로그램은 실행 가능한 정적인 코드를 가지고 있는 파일이라고 볼 수 있으며 (예: `.exe`,`.out`) 보통 디스크에 저장된 파일이라고 보시면 됩니다. 프로그램은 실행은 가능하지만 아직 실행전 상태인 파일들 이며 완성된 프로그램은 쉽게 말해 거대한 코드 덩어리라고 볼 수도 있습..
Callback Function (콜백 함수)
프로그래밍에서 CallBack(콜백), 또는 Callback Function)은 다른 코드의 매개변수로서 전달되어 나중에 호출을 할 수 있는 함수를 의미합니다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라서 즉시 실행항 수도 있고, 아니면 나중에 실행 할 수도 있습니다. 일반적으로 콜백을 전달 즉, 함수를 매개변수로 전달할 때는 함수의 포인터형 이나 람다함수를 사용하기도 합니다. 예시로 함수 포인터를 이용한 콜백#include using namespace std;// 콜백 함수: 파일 열기 완료 후 실행할 함수void OnFileOpened(){ cout 위의 예시 코드 구문 처럼 콜백함수는 함수를 매개변수로 전달받아 `OnFileOpened` 함수가 다른 영역에서 호출이 될 수 있도록 할 수 있습니다..
#pragma
`#pragma`는 전처리 구문 중에 하나이며 전처리 구문이란 간단하게 컴파일 이전 단계에 처리해야할 구문이라고 볼 수 있습니다. C++언어세 전처리 구문에는 `#pragma` 외에 대표적으로 `#define` , `#include` 등이 있고 해당 선언들을 보면 선언 앞에 # 기호가 붙어 있는데 C++에서 #기호가 앞에 붙어 있다면 전처리 지시자로 앞서 말했든 컴파일러가 번역을 하기전에 처리할 구문들 이라고 볼 수 있습니다.#pragma#pragma는 선언 뒤에 오는 내용에 따라서 전처리기에게 어떤 일을 하라는 명령을 내려줍니다. 선언 형태는 보통 `#pragma ____` 형태를 가지고 있습니다.. 뒤의 공백에 오는 키워드에 따라서 `#pragma`를 통해 실행 되는 기능이 달라지게 됩니다. 대표적으..
큐 (Queue)
큐는 자료구조중에 한가지로 FIFO(First In - First Out) 선입선출의 형태를 가지고 있습니다. 즉, 먼저 큐에 추가된 데이터는 먼저 처리되고 제거 되며 단어로 Queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 됩니다.나중에 집어 넣은 데이터가 먼저 나오는 즉 후입선출(LIFO, Last In - First Out) 스택과는 반대되는 개념이라고 볼 수 있습니다.큐의 구성요소Elements(데이터 요소): 큐에 저장되는 실제 데이터 항목들로, 큐에 추가되거나 제거되는 데이터를 의미합니다.Enqueue (삽입 연산) : 큐의 뒤쪽(Rear)에 데이터 추가 합니다, 새로운 데이터 요소가 큐의 가장 뒤에 추가됩니다..
Navigation Mesh ( 내비게이션 메시 )
내비게이션 메시란?내비게이션 메시 (Navigation Mesh)는 인공지능 응용 프로그램에서 복잡한 공간을 경로 탐색 할 수 있도록 도와주는 추상적인 데이터 구조 입니다. 쉽게 네비게이션 메시는 캐릭터가 이동할 수 있는 공간을 정의한 지도이며 길찾기 시스템의 기반이 되는 데이터 구조 입니다.언리얼 엔진에서의 내비게이션 메시언리얼 엔진에서는 네비게이션 메시가 여러 개의 폴리곤으로 구성되어 있고, 이 폴리곤은 서로 연결되어 있어 캐릭터가 한 영역에서 다른 영역으로 이동할 수 있도록 경로를 구성해 줍니다. 언리얼 엔진도 마찬가지로 폴리곤의 비용을 가장 낮추기 위해서 A*(Astar) 알고리즘을 사용해 최단 경로를 찾으려고 시도 합니다. 언리얼 엔진에서는 NavMeshBoundsVolume 시스템으로 바닥 표..
Virtual Memory ( 가상 메모리 )
Virtual Memory ( 가상 메모리 )가상 메모리는 물리 메모리보다 큰 메모리 공간을 프로그램에 제공하기 위해, 보조 저장 장치를 활용하여 가상의 주소 공간을 운영체제가 관리하는 메모리 관리 기법입니다.가상 메모리는 메모리 관리 기법의 하나로, 시스템에 실제로 이용 가능한 기억 자원을 추상화하여 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식입니다. 이 시스템은 물리 메모리의 크기에 제한되지 않고, 프로그램이 더 많은 메모리를 사용할 수 있도록 합니다. 가상 메모리는 물리 메모리와 보조 저장 장치(디스크)를 활용하여, 프로그램에게 더 큰 메모리 공간을 제공합니다.동작 원리와 시스템 구성왜냐하면 가상 메모리 시스템은 물리 메모리의 크기를 초과하는 프로그램도 실행할 수 있게 하..
객체 지향 설계의 5가지 원칙 - S.O.L.I.D
S.O.L.I.DS.O.L.I.D 원칙이란 객체지향 프로그래밍을 진행하면서 지켜야 할 5가지의 원칙을 의미합니다. 각각 원칙의 앞글자를 가져와서 SOLID라고 표기하며 소프트웨어의 유지보수 및 확장을 더 쉽게 할 수 있게 하고 또한 코드의 복잡성을 제거하여 리팩토링에 소요된 시간을 줄이며, 개발의 생산성을 높일 수가 있습니다.단일 책임 원칙 - S.R.P (Single Responsibility Principle)하나의 클래스는 하나의 기능(책임)만을 가져야 한다.하나의 클래스는 하나의 책임만을 가지도록 설계를 해야합니다. 여기서 책임이란 하나의 기능을 의미하며 해당 기능에 대해서 수행하도록 설계를 해야 합니다. 하나의 클래스의 여러 가지의 기능이 들어가게 설계를 진행한다면 기능을 변경(수정)할 경우에 ..
Stack (스택)
Stack?Stack(스택)은 메모리의 영역 중 하나로 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸하게 됩니다.함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장됩니다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 합니다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조이며 후입 선출(LIFO - Last In First Out) 구조로 되어 있습니다. 자료를 넣는 과정을 '밀어 넣는다' 라고 하여 푸쉬(Push)라고 하며 반대로 넣어둔 자료를 꺼내는 것을 팝(Pop) 이라고 합니다. 이때 나중에(최근에..
Cache Memory(캐시 메모리)
Cache Memory(캐시 메모리) ?Cache Memory, 즉 캐시 메모리는 메인 메모리(RAM)보다 빠른 임시 저장소로, 일반적으로 CPU 내부 또는 가까운 위치에 존재합니다. 데이터나 값을 미리 복사해 놓는 임시 장소를 가리키기도 하며 캐시는 데이터에 접근하는 시간이 오래 걸리는 경우나 자주 사용되는 데이터를 저장하여 불필요한 메모리 접근을 줄이고 처리 시간을 단축합니다. 빠른 CPU의 처리 속도와 상대적으로 느린 메인 메모리에서의 속도의 차이를 극복하는 중간 버퍼 역할을 합니다. 쉽게 표현하자면 CPU는 빠르게 일을 진행하고 있는데, 메모리에서 데이터를 가져오고 가져가는데 느려서 중간에 미리 CPU에 전달될 데이터를 들고 서 있는 형태라고 말할 수 있습니다. Cache Memory의 특징CPU..
RAM (Random-Access Memory, 랜덤 액세스 메모리)
RAM (Random-Access Memory, 랜덤 액세스 메모리)?RAM (Random-Accses Memory) 은 컴퓨터나 노트북의 단기 기억 장치입니다. 임의의 영역에 접근하여 일고 쓰기가 가능한 주기억 장치이기도 합니다. 또한 전원이 끊기면 데이터가 소멸되는 휘발성 특징을 지니고 있으며 어느 위치에 저장된 데이터든 접근(읽기 및 쓰기)하는 데 거의 동일한 시간이 걸리는 메모리이기에 프로그램 로딩, 데이터의 임시저장과 같은 용도로 사용되며 '랜덤(random, 무작위)'라는 명칭이 주어집니다. RAM 의 용도RAM (Random-Accsess Memory)은 애플리케이션에 단기적으로 데이터 저장 및 액세스 공간을 제공하는 컴퓨터의 임시 스토리지입니다. RAM을 통하여 애플리케이션 로딩, 인터..
FSM (Finite State Machine, 유한 상태 기계)
FSM (Finite State Machine, 유한 상태 기계)유한 상태 기계(Finite-State Machine . FSM) 또는 유한 오토마톤(Finite Automaton, FA 복수형 : 유한 오토마타, Finite Automata)는 컴퓨터 프로그램과 전자 논리 회로를 설계하는 데 쓰이는 수학적 모델입니다. ' 상태 기계' 라고 부르기도 합니다.유한 상태를 갖으며, 입력 및 현재 상태에 따라, 상태가 전이(전환)되는 기계에 대한 추상적 모형 즉, 디지털 시스템, 디지털 컴퓨터 등에 대한 추상적 모델로 볼 수 있습니다. 유한 상태 집합 내에 움직이며 시간 진행에 따라, 미리 정해진 유한 상태 집합 내에세 상태가 변할 수 있는 장치이며 기본적으로 내부에 유한한 메모리가 있는 자동 가계에 대한 추..