C++ 가상함수 virtual Fuction 가상함수는 파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 뜻한다. 파생클래스에서 virtual 키워드를 사용하지 않아도 자동으로 가상함수가 된다. 가상 소멸자 소멸자는 가상함수로 선언 하여 기본 클래스와 파생 클래스 모든 소멸자가 호출되도록 한다. 생성자와 소멸자 호출 순서 부모 클래스가 있는 자식 클래스는 부모생성자 - 자식생성자 - 자식소멸자 - 부모소멸자 순으로 호출된다. new, delete 연산자 오버로딩 new 연산자는 메모리 할당, 생성자 호출, 주소 값의 형변환 작업을 진행한다. 연산자 함수가 먼저 호출되고 해당 타입의 생성자가 호출된다. void * operator new (size_t size) { void * adr = new ch..
운영체제 (Operating System) 메모리 구조 (Memory Structure) 운영체제의 메모리 구조는 유저 영역 과 커널 영역 두가지 영역으로 나뉜다. 사용자가 함부로 커널 영역에 접근할 수 없도록 영역을 나누어 놓았다. 유저 영역에는 4가지로 나뉘는데 코드, 데이터, 스택, 힙 으로 구분된다. 코드 영역 (Code) 실행할 프로그램의 코드가 저장되는 영역이다. 텍스트 영역이라고도 불린다. 여기서 코드는 컴파일된 기계어 코드를 뜻한다. 데이터 영역 (Data) 전역변수와 정적(static) 변수가 저장되는 영역이다. 프로그램이 시작되고 종료될 때까지 메모리에 계속 남아있다. 스택 영역 (Stack) 프로그램에서 호출되는 함수의 지역변수와, 매개변수가 저장되는 영역이다. 스택은 함수가 시작, ..
렌더링 파이프라인 (Rendering Pipeline) 파이프라인의 모든 단계는 Direct3D API를 사용하여 구성할 수 있으며, HLSL 언어를 사용하여 프로그래밍 가능하다. 일반적으로 VS(Vertex Shader)단계와 PS(Pixel Shader)단계에서 사용된다. 1. 입력 어셈블러 (Input Assembler) 메모리에 사용자가 채워놓은 기본데이터(삼각형, 선, 점)를 다른 파이프라인 단계에서 사용하기 위한 기본 형식으로 조립하는 단계 2. 꼭지점 셰이더 (Vertex Shader) 변환(Transformation), 스키닝(Skinning), 조명(Vertex Lighting) 등의 작업을 수행한다. 이중 변환 작업 과정에 대해 좀더 설명하자면, [오브젝트 공간] -> 월드 변환 -> ..
절차지향과 객체지향 절차 지향 프로그래밍 (Procedure Programming) Top-Down 방식으로 접근하며 순차적인 처리가 중요시 되어 프로그램이 전체적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 절차지향 언어는 C언어가 있다. 함수로 부터 데이터를 받아서 기능을 구현하는 방식으로 진행된다. 절차적 프로그래밍 이라는 말이 더 정확하다. 코드의 가독성이 좋고, 실행속도가 빠르다는 장점이 있지만, 유지보수 및 디버깅이 어렵다. 객체지향 프로그래밍 (Object Oriented Programming) Bottom-Up 방식으로 접근하며, 데이터와 절차를 하나의 덩어리(Object)로 묶어서 처리한다. 모듈화 및 캡슐화로 유지보수에 용이하며, 코드의 재사용성이 높다. 처리속도가 상대적으로 느..
알고리즘 정렬 알고리즘 (Sorting Algorithm) [ Bubble Sort, Heap Sort, Merge Sort, Quick Sort, Insert Sort ] Bubble Sort 서로 인접해 있는 두 원소를 비교하며 정렬하는 알고리즘이다. 0번 인덱스 부터 n-1번 인덱스까지 모든 인덱스를 비교하면 정렬 시간복잡도는 O(n^2) Heap Sort 데이터를 바이너리 힙 자료구조에 담아서 최대값이나 최소값부터 하나씩 꺼내서 정렬하는 알고리즘이다. 시간 복잡도는 O(nlogn) Merge Sort Divide and conquer 의 원리로 원소 한개씩 나누어 결합(Combine) 과정에서 원소끼리 비교후 정렬되어 임시 배열에 저장하고, 정렬이 다되면 임시배열을 복사하여 결과 목록을 만든다. ..