일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- effective stl
- 반복자
- 메타테이블
- exception
- 오블완
- 영화 리뷰
- lua
- 함수 객체
- 비교 함수 객체
- resource management class
- 게임
- Effective c++
- UE4
- 다형성
- implicit conversion
- 참조자
- c++
- 루아
- 상속
- operator new
- 언리얼
- reference
- 티스토리챌린지
- 스마트 포인터
- virtual function
- 암시적 변환
- Smart Pointer
- 예외
- 영화
- more effective c++
- Today
- Total
목록개발 (181)
스토리텔링 개발자
개요메모리 관리는 C++의 난점 중 하나입니다. 스택에 할당된 메모리는 범위만 잘 지켜주면 대부분은 괜찮지만,힙에 할당한 메모리는 물가에 내놓은 갓난 아이처럼 끝까지 잘 지켜봐 줘야 합니다.자칫 잘못하면 그대로 소중한 메모리의 누수로까지 이어집니다. 좀 더 편하게 메모리 관리를 할 수 있는 방법은 없을까요? 그런 고민에서 생겨난 것이 이름처럼 스마트한 스마트 포인터입니다. 이 스마트 포인터는, 이젠 준 필수 기능이 되었습니다.이전까진 시험적으로 사용해오다가, 모던 C++부터는 정식 라이브러리에 완전히 편입되기까지 했죠. 또한 언리얼 역시 이 C++ 라이브러리가 제공하는 스마트 포인터와 거의 동일한 것을 제공하고 있습니다. 오늘 이야기해 볼 것이 이 언리얼의 스마트 포인터 입니다. 스마트 포인터의 종류..
개요 테이블에 값 할당을 커스텀할 때 무심코 실수할만한 부분이 있어 정리했습니다. __newindex란? 테이블에 값 할당을 시도할 시 해당 키가 존재하지 않는다면 동작하는 메타테이블의 재선언 가능입니다. [Lua] 메타 테이블(Metatable) 문제점 위 정의에서 문제가 되는 부분은 '해당 키가 존재하지 않는다면' 입니다. 정리하자면 해당 키 값으로 할당된 적이 없을때만 __newindex의 로직이 실행됩니다. 아래의 예시를 보시죠. isVisible 키에 할당 시 내부 inner의 isVisible에도 함께 할당시키고 싶은 상황입니다. 보기 쉽게 정리하면 아래와 같습니다. 1. 'isVisible 할당'이라고 출력 2. 해당 테이블에 isVisible 할당 3. 해당 테이블 내의 inner 테이블에..
개요 루아에는 상속이라는 개념이 없습니다. 정확하게 말하자면, 언어에서 지원하지 않는다는 의미입니다. 하지만 클래스를 통한 객체 지향 프로그래밍에 익숙하다면 상속 개념을 사용하고 싶은 것도 사실입니다. 이에 대해서는 여러가지 방법이 있겠지만, 여기선 메타테이블을 사용하여 상속 개념을 구현하는 방법을 하나 소개하겠습니다. 주요 루아 함수 상속 개념을 구현하기 위해서 아래의 루아 함수들을 활용합니다. rawget 메타 테이블 콜스택을 거치지 않고 해당 테이블의 값을 직접 가져옵니다. rawset 메타 테이블 콜스택을 거치지 않고 해당 테이블에 키 / 값 페어를 직접 적용합니다. setmetatable(t, mt) mt 테이블을 t 테이블의 메타 테이블로 설정합니다. getmetatable(t) t 테이블의 ..
개요 리눅스에는 루트와 그 아래로 수많은 디렉토리들로 구성되어 있습니다. 그 많은 디렉토리들은 대체 어디에 쓰이는 걸까요. 디렉토리들에 대해 말하기 이전에 다음 문장을 먼저 이야기해 보도록 하겠습니다. Everythig is file 모든 건 파일이다. 이 문장은 유닉스 시스템의 모토입니다. 그 뜻은 말 그대로입니다. 유닉스와 그 계보를 잇는 리눅스들은 일반 파일, 디렉토리, 하드 드라이브, 키보드, 프린터, 소켓, 파이프 등, 다룰 수 있는 모든 것들을 파일로 처리합니다. 모든 걸 파일로 처리하기 위해 리눅스는 파일 디스크립터(file descriptor) 라는 것을 사용합니다. 루트 디렉토리, 홈 디렉토리 본격적으로 디렉토리들을 다뤄보기 전에, 루트 디렉토리와 홈 디렉토리의 개념에 대해 잠깐 다루고 ..
메타 테이블이란?메타 테이블이 뜻하는 바는 무엇일까요?이름만으로는 그다지 직관적이지 않네요. 뜻을 명확히 해보면 그 용도도 명확해지지 않을까요?간단히 백과사전을 뒤져 보았습니다. 메타 테이블은 소스 코드 또는 메타 데이터 역할을 하는 데이터를 보유하도록 지정된 데이터베이스 또는 기타 데이터 보유 구조의 섹션입니다. 여전히 모호하네요.하나씩 분할 정복해 보겠습니다. '메타 데이터'는 뭘 의미할까요?이번에도 찾아 보았습니다. 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해주는 데이터 데이터 구조를 정의하는 데이터라고 할 수 있겠네요.설계도라고 비유하면 딱 맞지 않을까요?xml의 스키마 처럼요. 요약해보면,메타 테이블이란데이터 구조를 정의하는 데이터(메타 데이터)들을 포함하는 데이터 테이블을 뜻하는..
개요 데이터 혹은 에셋을 로드할 때 동기나 비동기 같은 단어가 튀어나오곤 합니다. 동기와 비동기. 단어만으로는 딱 느낌이 오지 않는데요. 정확하게 어떻게 구분되는지, 또 어떻게 동작하는지 알아보도록 하겠습니다. 동기 / 비동기(synchronous / asynchronous) 우선 각각의 특징을 정리해 보도록 하겠습니다. 동기 메모리가 명령어를 처리하는 흐름, 즉 선형적인 처리를 의미합니다. 선형적이란 것도 조금 설명이 필요하겠는데요. 명령을 일렬로 쭉 줄세워서 차례로 처리해나가는 걸 선형적이라고 합니다. 장점은 순서대로 처리해 나가므로 직관적이라는 점입니다.(버그 수정에는 직관적임이 참 중요합니다.) 단점은 자원 소모가 큰 작업이라면 프리징을 수반할 수 있다는 점입니다. 비동기 메모리의 흐름과 동떨어진..
개요 언리얼에서 에셋을 참조하는 방법은 두 가지가 있습니다. 참조하는 방법이라고 하니까 딱딱한 감이 없잖아 있는데요. 쉽게 말해서 액터가 특정 에셋을 가지고 있는 상황입니다. 근데 가지고 있으면 가지고 있는거지 강참조, 약참조라니요. 대체 무슨 차이일까요. 일반적인 참조(강참조) 우선 일반적인 경우를 살펴보도록 하겠습니다. 보통 에셋을 참조, 즉 소유하기 위해서는 보통 이렇게 하겠죠. 1. UPROPERTY() 멤버변수로 선언합니다. 2-1. C++에서 LoadObject 함수를 사용하여 직접 에셋을 불러와 사용하거나 2-2. 엔진에서 에셋을 직접 선택하여 사용합니다. 이런 일반적인 방식이 바로 강참조입니다. 즉 에셋을 지정하는 시점에 에셋이 메모리에 올라가는 방식을 강참조라고 합니다. 일반적인 참조의 ..
개요 컴포넌트는 액터에 붙여서 사용하는 UObject입니다. 액터에 붙여서 사용한다는 점만 특이한, 그냥 UObject라고 봐도 무방할 듯 하네요. 하지만 바로 그 붙인다는 점이 무척 유용합니다. 사실 액터 클래스 내부(BP 클래스도 포함이죠)에 특정 UObject를 일일이 정의하기란 상당히 번거로운 일이니까요. 컴포넌트는 그냥 자체적으로 정의하고, 만들고, 붙이기만 하면 그 객체 전용이라는 걸 강조할 수 있죠. 굳이 현실세계로 비유하자면 이렇게 비유할 수 있을까요. 자동차에 열선을 추가 하려고 하는 상황이라면, 자동차 액터에 열선 컴포넌트를 붙이는 셈이라고 할 수 있죠. 다양한 컴포넌트 유형 컴포넌트는 객체에 붙어서 그 객체의 기능 자체로 사용될 수 있다는 점에 착안해서, 이미 UActorCompone..