프로그래밍 396

생성자

명시적으로 정의하는 복사 생성자C++에서의 복사 생성자는명시적으로 정의할 수 있다.명시적으로 정의하는 2가지 방식은default로 만드는 것과delete로 삭제하는 것이 있다.복사 생성자를 삭제하면더 이상 객체를 복제하지 않는다.객체를 값으로 전달하는 것을 방지하기 위하여이러한 삭제를 정의할 수 있다.만약 클래스의 데이터가 복사 생성자가 삭제되었다면,그 클래스의 복사 생성자도 자동으로 삭제된다.초기화 리스트 생성자초기화 리스트 생성자란,std::initilalizer_list를 첫 번째 매개변수로 받고,다른 매개변수는 없거나 디폴트 값을 가진 매개변수를추가로 받는 생성자를 말한다.위임 생성자(delegating Constructor)위임 생성자를 사용하면같은 클래스의 생성자끼리 호출할 수 있다.단, 생성..

2월 중순 지나며 앞으로 계획

2월부터 게임 업계에서 일하기 시작했다.이제 막 일 배우는 입장에서 더딘 부분이 많아 스스로가 답답하다. 그래서 다음과 같이 공부를 시작하고자 한다. 루키스 언리얼 PART 4 게임 서버와 반쯤 들었던 유데미 언리얼 멀티 서버 강의를다시 들으며이론적인 부분과 구현적인 부분을 둘 다 채워나가고자 한다. 지금 다니는 회사에서 서버도 어느정도 알아야 하는 것 같아서퇴근하고 조금씩이나마 들어두려고 한다 개발자가 되었으니 더 열심히 하자 :)! 시간이 걸리더라도 결과물 꼭 블로그에 올리기!

동적 메모리 다루기

메모리는 컴퓨터의 구성 요소에 속한다.C++에서는 동적 메모리를 사용자가 직접 관리해야 하므로크게메모리의 작동 과정,할당과 해제,메모리 할당에 실패한 경우이 3가지를 알아보자.메모리 작동 과정객체가 메모리에 할당 되는 방식을 머리 속에 자연스럽게그려지는 것 부터 시작해보자.네모 박스를 레이블이라 칭하고이 레이블은 메모리를 가리키는 일종의 변수의 이름이라 생각하자.이 레이블(상자)에 담긴 데이터는그 메모리에 현재 저장된 값이다.이제 객체가 메모리에 할당되는 과정을 떠올려 보았다.이러한 객체가 정적할당 되는 경우에는스택이라는 메모리 공간에 저장되어 컴파일 타임에생명주기가 결정이 된다.이러한 변수를 자동 변수라 하며스코프에 따라 자동으로 해제되므로 자동 변수라 한다.동적할당 되는 경우에는힙이라는 메모리 공간에..

IP(Internet Protocol) IPv4

IPv4 프레임의 데이터 필드에는 상위 계층에서 전달받거나상위 계층으로 전달해야 할 내용이 명시된다.따라서 IPv4 패킷은 프레임의 페이로드로 데이터 필드에 명시된다. IPv4 패킷은 다음과 같은 형식을 띈다. 1. 식별자 2. 플래그 3. 단편화 오프셋 4. TTL 5. 프로토콜 6. 송신지 IP 주소 7. 수신지 IP 주소 총 7개이다. 들어가기 앞서, 패킷이란?패킷(Packet)은 네트워크를 통해 전송되는 데이터의 형식화된 블록으로, 데이터 통신에서 사용되는 용어이다. 1. 식별자 식별자는 패킷에 할당된 번호이다.만일 메시지 전송 과정에서IPv4 패킷이 여러 조각으로 쪼개져서 전송되었다면,수신지에는 이들을 재조합해야 한다. 이때 잘게 쪼개져서 수신지에 도착한 IPv4 패킷들이 어떤 메시지에서쪼개졌..

필수 어법 이해하기 형용사

중국어에서 형용사의 역할 tip)형용사 + 地의 형태도 부사어가 될 수 있다.  1. 문장에서 술어 역할을 한다. 이 글은 복잡하다.这个文章  /       很       /   复杂。주어   부사어(정도 부사)   술어  2. 문장에서 的와 함께 쓰여 주어나 목적어를 수식하는 관형어 역할을 한다. 신선한 공기는 건강에 도움이 된다.新鲜的  / 空气  /  对身体  /  有  /  好处。관형어    주어      부사어     술어   목적어 관형어가 주어를 꾸며주고 있다.  3. 술어를 수식하는 부서어 역할을 한다. 그들은 중국어를 열심히 공부한다.他们    /   认真  /  学习  /  汉语。주어        부사어    술어   목적어  4. 문장에서 술어를 보충하는 보어 역할을 한다. 그는 잘생..

취미/HSK 2025.02.03

D3D11 조명 관련 노멀 벡터 변환

CPU에서 GPU로 데이터를 전송할 때는 비교적 속도가 느리니,최대한 단순하게 계산해서 접근할 수 있도록 하는 것이 좋다. 이러한 이론을 실제 코드로 구현하는 방법은여러 개의 변환을 순서만 잘 정리하면 하나의 변환 행렬로 만들 수 있다.따라서 결과적으로 GPU에게 회전과 이동을 한 하나의 변환 행렬만 보내면 된다. 이러한 변환에는Model Matrix, View Matrix, Projection Matrix가 같이 사용된다.위 3 가지는 나중에 추후 따로 더 자세하게 정리해보겠다. 이번 포스팅에서는 Model Matrix와 Invertranspose 두 가지를 사용해서쉐이더의 코드를 작성해볼 것이다.  노멀 벡터 노멀 벡터를 회전을 시킬 때는다른 방식을 사용해야 한다.물체를 회전을 시킨다면, 물체의 표면..

그래픽스/DX11 2025.02.03

C/C++ 스마트 포인터 간단 정리

스마트 포인터 C++ 프로그램에서 동적할당 된 메모리는, 반드시 delete를 통해서 메모리 해제가 이루어져야 합니다.C++에서 메모리 누수로부터 프로그램의 안정적으로 관리할 수 있도록스마트 포인터를 제공하고 있습니다.이 스마트 포인터는 RAII의 개념을 기반으로 제작되었으며,클래스 템플릿으로 구현되어 있습니다.포인터 처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해주고,Dangling 포인터, 할당 실패 등의 버그를 방지하도록 제작되었습니다. 이러한 스마트 포인터의 사용 이유는,스마트 포인터를 사용함으로써,new, delete와 같은 키워드를 사용하는 추가적인 코드를 줄일 수 있으며,RAII 개념을 기반으로 제작되었기 때문에,제작의도에 맞게 사용자가 메모리 관리를 할 때 좀 더 안..

그래서 다형성이 뭐라고요?

간단히 말하자면하나의 개체나 메소드가 여러 가지 형태를 가지는 것이다. 여러 가지 형태를 가지는 것이니,오버로딩과 오버라이딩을 써서 여러 형태를 가지는 기능들을한데 묶어 분류해 놓은 것이다. 다형성은 굉장히 중요하다.그 이유는, 실제 유용성이 굉장히 많다.예를 들어 게임이라고 하면,몬스터의 종류가 많을 것이다.이런 몬스터의 부모 클래스가 되는 BaseMonster 클래스가 있을 것이고,이 클래스에 파생되는 애들도 있을 것이다.그럼 몬스터 종류가 약 20개쯤 된다고 가정해보자. 이 다른 타입들을 배열에 저장하기에는 좀 부담스럽다.귀찮고 번거로운 일이기 때문에. BaseMonster 클래스 내부에virtual 반환형 Move()  함수를 제작한다.이후 monster* 배열을 제작한 후, 이 배열 내부에 있는..

인라인 함수

함수를 호출할 때 필요 조건함수는 메모리 안에 "할당"되어 있다.함수를 호출하기 위해 필요한 단계들변수들을 스택에 push함수 주소로 점프함수를 실행호출자 함수로 다시 점프1번 단계에서 넣어뒀던 변수들을 "pop"함수 주소로 이동되서 써야하니까 변수를 스택에 넣어두고스택에서 가리키는 포인터를 확 뒤돌리는 것 만으로도충분히 그 값을 쓸 수 있다.하나하나 빼서 쓰지는 않다. 여기서 실제 컴퓨터 아키텍처에 따라4,5번은 순서가 뒤바뀔 수 있다. 함수의 단점뭔가 여러 단계를 거치므로 생기는 단점이 있을 것 같지 않은가? 여러 단계를 거치다보니 좀 더 느리다는 단점있다.CPU 캐시에 최적이 아닐 수도 있으면 더 느리다.모던 cpu 아키텍처에서는 더 느리다. 특히나 캐시 최적화나 이런 점 때문에 느린 속도를 가진다..