목록Technology (218)
logbook

1. C++ 진짜 싫다아니 대체 이런 언어를 왜 쓰는 거죠.프레임워크를 설치하든, 코드를 짜든, 문법 배운 거 실습을 하든 도통 뭘 하든 간에 제대로 돌아가는 꼴을 못 봤습니다.버전은 어마어마하고, 책임은 몽땅 프로그래머한테 떠넘기고, OS마다 컴파일러마다 파편화는 아찔한 수준이고, 패키지든 프레임워크든 뭐 하나 설치만 하면 에러부터 뿜어대고...Catch2요?아니 유닛 테스트를 위해서 쓸 수 있는 좋은 프레임워크라고 소개하면 뭐 합니까, 설치해서 쓸려고 해도 에러만 토해내는데!초보자 입장인 저에게는 C++이 너무나도 싫습니다. 문법 괴팍하다고 한동한 멀리하던 Python이 선녀로 보이는 수준입니다.아니 패키지 설치하라고 할 때마다, 새로운 문법을 하나씩 배울 때마다 늘 새롭고 재밌지가 않아요. 겁부터 ..

1. 템플릿템플릿은 C++에서 제네릭을 구현하기 위해 사용되는 문법입니다.타입을 고정시키지 않고 경우에 따라 다양한 타입의 값을 받아 동작시킬 수 있기 때문에 보다 유연하고, 재사용성이 높은 코드를 작성하는 것이 가능해집니다.template struct AutoBrake { AutoBrake(const T& publish) : publish{ publish } {} void observe(const SpeedUpdate& cd) {} void observe(const CarDetected& cd) {} void set_collision_threshold_s(double x) { collision_threshold_s = x; } double get_speed_..

1. 상수상수는 변수와 달리 고정된 값을 다루기 위해 사용되는 개념입니다.상수로 정의된 값은 코드가 실행되는 동안 변경되지 않는다는 것을 보장할 수 있기 때문에 데이터의 신뢰성을 높일 수 있습니다.이 때문에 원주율(PI), 랜덤 확률 등과 같이 코드 내에서 고정적으로 사용되는 공통 값을 다룰 때는 상수로 정의하여 가독성을 높이는 방안을 주로 사용합니다. C++에서는 이 상수를 다룰 때 const와 constexpr이라는 두 가지 접근성을 보장합니다.여기서는 const와 constexper이 어떻게 다른지 간략히 살펴봅니다. 2. const먼저 const는 변수와 함께 사용되며 const는 함수나 생성자를 정의할 때는 사용되지 않습니다.const를 통해 정의된 값은 컴파일 타임 또는 런타임에 값이 결정됩..

1. 메모리 주소와 포인터포인터는 값의 복사가 아닌 값의 참조를 기반으로 동작합니다.C++는 기본적으로 값을 다룰 때 복사 연산(Call by Value)을 사용하기 때문에 원본 값의 오염을 방지하고 메모리 낭비를 방지하기 위해서는 포인터에 대한 이해가 매우 중요합니다.포인터 변수에는 값 그 자체가 아닌, 값이 저장된 메모리 상의 주소를 담을 수 있습니다. 메모리 주소를 담을 수 있는 변수가 존재한다면, 포인터 변수에 담을 메모리 주소값 그 자체를 표현하는 것도 가능해야 할 것입니다.이러한 작업을 수행하기 위해 & 연산자와 * 연산자가 등장합니다. 2. & 연산자와 * 연산자로 포인터 다루기포인터 변수는 값이 아닌 값의 주소를 저장하므로, 일반적인 변수와 다르게 취급해야 합니다.포인터 변수를 선언할 때..

1. non-type templateC++에서 제네릭 함수를 구현하기 위해 사용되는 template은 아래와 같이 호출 시 타입을 지정하여 호출하는 것이 기본적인 사용법입니다.templateT sum(T n1, T n2) { return (n1 + n2);}int main() { int x = sum(1, 2); printf("%d\n", x); return 0;}제네릭은 사용자가 지정한 타입에 맞게 유동적으로 연산을 수행할 수 있으며 코드의 재활용성을 높이고, 다양한 상황에 맞는 유연한 대응이 가능해 활용도가 높은 고급 기능 중 하나입니다.non-type template은 위 코드와 같이 제네릭 함수를 사용할 때 기호를 사용해 지정할 타입을 명시해 주는 것 대신, 암시적으로 인자..

1. strcpy( )strcpy( )는 문자열을 복사하는 함수 중 하나로, 널 문자(\0)을 만날 때까지 src에서 dest로 복사하는 함수입니다.문자열 전체를 복사하지만, 길이 제한이 없어서 버퍼 오버플로우가 발생할 위험이 있습니다.char buffer[100];std::strcpy(buffer, "Hello, world!"); 2. strncpy( )strcpy( ) 함수와 달리 strncpy( ) 함수는 지정된 길이만큼만 복사하는 것이 가능합니다.이 때문에 strcpy( )보다 더 안전하게 사용할 수 있지만, n바이트에 도달할 때까지 복사를 멈추지 않기 때문에 널 문자(\0)를 수동으로 넣어주어야 합니다.char buffer[100];std:strncpy(buffer, "Hello, world..

1. OnDisable( )OnDisable( ) 메서드는 객체가 파괴(Destroy)되거나, 비활성화(SetActive(false))되는 상황처럼 대상이 '사라질 때' 발동되는 이벤트 메서드입니다.이 때문에 OnDisable( )은 객체가 사라지면서 가지고 있던 참조나 변수 값들을 '정리'하기 위해 주로 사용됩니다.이벤트 리스너를 삭제하거나, 변경되었던 변수의 값들을 초기화하는 것이 대표적입니다.그렇다면 OnDisable( ) 메서드가 호출되는 시점을 어떻게 이해해야 할까요? 2. OnDisable( )이 발동되는 시점아래와 같이 싱글턴 타입의 클래스를 간단히 생성하고, OnDisable( )을 다른 클래스에서 호출합니다.public class GameControlApplicationQuitCheck..
1. 타인과의 상호작용가상 환경 속에서 타인과 함께 활동하는 것은 VR 경험의 완성도와 활동 범위를 대폭 향상할 수 있기 때문에 중요한 역할을 한다.단순하게 가상의 공간을 타인과 함께 공유하는 것부터 함께 어떠한 문제를 해결하거나, 놀이를 즐기는 등 애플리케이션의 목적에 따라 상호작용 방법과 요구되는 기술 등이 크게 달라진다. 1.1. 공유 경험타인과 정보와 경험을 공유하는 목적을 지닌 상호작용이다.여기서 주의할 점은 공유(Share)와 협업(Collaborative)은 동일한 의미가 아니라는 점이다.즉, VR 경험을 공유한다고 해서 타인과 협업하는 것이라고 단정 지어서는 안 된다.단적인 예시로 과 이 동일한 경험을 제공하는 애플리케이션이라고 취급하지는 않을 것이다.경험은 한 명만 수행하고 나머지는 그 ..