스마트포인터

Gamebryo 2011.09.19 00:42


3D 그래픽 프로그램에는 많은 수의 오브젝트들이 생성된다.  이 오브젝트들은 메모리 절감이나 속도 향상을 위해서 공유되어 사용된다.

오브젝트의 공유는 장점도 있지만 단점도 존재한다.  오브젝트의 생성은 자유롭지만 소멸에 대해서는 자유롭지 못하다.

그래서 참조횟수(Reference counter)라는 것을 이용하여 참조횟수가 0이 되면 소멸하도록 만든다.

 

참조횟수라는 개념은 대부분의 그래픽 엔진(게임 엔진 포함)이 가지고 있다.  게임브리오 엔진은 NiRefObject 클래스가 참조횟수를 관리한다.

 

참조횟수를 증가하고 감소하기 위해서 게임브리오에서는 IncRefCount 함수와 DecRefCount 함수를 사용하고 있다.  프로그래머는 잘 짜여진 원칙에 의해서 참조횟수를 조절해주어야 할 것이다.  그렇지 않다면, 어떤 오브젝트는 절대 소멸되지 않을 수도 있고 어떤 오브젝트는 사용중인데 소멸되버려서 프로그램 크래쉬가 발생할 수도 있다.

 

이러한 참조횟수를 관리해주기 좋은 개념이 바로 스마트포인터이다.

 

STL에 보면 스마트포인터가 이미 있다.  사실 STL을 모르기때문에 똑같은 개념인가는 모르겠다.

 

스마트포인터는 포인터에 적용된 오브젝트들의 소멸을 관리해준다.  생성된 오브젝트는 어떠한 스마트포인터에도 적용되지 않았을 때 자동 소멸한다.

 

게임브리오에서는 스마트포인터를 이용하여 씬그래프의 구성요소들을 모두 관리한다.  스마트포인터의 변수타입은 구성요소 이름+Ptr 형태이다.

 

예를 들어 NiNode 클래스라면,

일반 포인터 : NiNode *

스마트포인터 : NiNodePtr

이다.

 

또한 게임브리오에서는 스마트포인터 변수명의 앞첨자를 sp로 하는 것을 권고한다.  일반 포인터는 pk 또는 p를 권고하고 있다.

1) 스마트 포인터의 변수 선언 자체가 이미 NULL로 초기화되어 있으므로 별도의 초기화가 필요하지 않다.

2) 스마트 포인터에 다른 값이 할당되면, 기존의 오브젝트의 참조 횟수가 1 감소한다.

3) 참조 횟수가 0이 되면 자동 소멸한다.  (생성시 제외)

 

이제 간단한 예를 들어보도록 하자.

 

NiNodePtr spNode;               //  스마트포인터 변수는 NULL로 초기화된다.

spNode = new NiNode();        //  생성된 NiNode 오브젝트가 spNode 스마트포인터로 할당되어 참조횟수가 1 증가한다.

spNode = NULL;                    //  스마트포인터 변수가 NULL로 바뀌어 spNode에 할당된 NiNode 오브젝트의 참조횟수가 1 감소한다.

 

자 이렇게 함으로써 간단하게 스마트 포인터를 사용할 수 있다.

이것도 중요하니 알아두시길 바란다.

4) 스마트포인터 변수가 지역변수의 경우 함수의 종료와 함께 해당 변수의 오브젝트 참조횟수가 1 감소한다.

 

이렇게 강력한 기능의 스마트포인터에도 주의할 점들이 있다.

 

void Test( NiNodePtr spNode );          //   Test 함수의 인자가 스마트포인터이다.

NiNode *pkNode = new NiNode();        //   NiNode 객체를 하나 할당받아 일반 포인터로 저장

Test( pkNode );                                 //   Test 함수 호출

Test( pkNode );                                 //   Test 함수 재호출

 

자 이 소스는 말끔해보인다.  전혀 문제없어보이는 이 소스는 무엇이 잘못되었을까?  아시는 분은 댓글로..

 

역시 마찬가지 왕주의할 것 하나 더..

NiNodePtr Test();                            //   Test 함수의반환값이 스마트포인터이다.

NiNode *pkNode = Test();                  //   반환값을 일반포인터로 받았다.

 

이 소스의 문제점은 또 무엇일까?  한번쯤은 짚고 넘어가야할 문제이다.

 

스마트포인터의 개념을 이해했다면 쉽게 답을 할 수 있을 것이다.

 

스마트포인터를 이해했다면, 이제 게임브리오 엔진을 시작해볼 수 있다.

 

~~

 

신고

'Gamebryo' 카테고리의 다른 글

NiAVObject::Update  (0) 2011.09.24
트리구조  (0) 2011.09.24
트리구조  (0) 2011.09.23
렌더러 생성  (0) 2011.09.19
스마트포인터  (0) 2011.09.19

언론이란?

Column/Massmedia 2011.09.16 01:01


이 글은 정말 옛날에 썼던 글입니다.  고 노무현 정부 시절에 쓴 글이니 말입니다.

언론이란 무엇인가?
 
요즘 언론에 대한 비판이 많아지고 있지만..
정작 제대로 언론의 의미를 알고 있는 사람은 극히 드문 듯 하다.
 
언론이란 사실과 그를 바탕으로 한 비판을 뜻한다.  언(言)이라 함은 사실을 말하는 것을 뜻하며, 론(論)이라 함은 비판을 함을 뜻한다.
 
신문의 예를 들자.  언(言)이라 함은 대부분의 지면을 할애하고 있는 보도기사가 예라 할 수 있다.  론(論)이라 함은 사설 및 컬럼을 예로 들 수 있다.
 
그러나 우리의 언론은 어딘가 비뚤어져 있다.  언론의 색깔이라 할 수 있는 론(論)의 기능은 양비론이 춤을 추고 있다.  그에 비해서 사실을 왜곡없이 보도해야하는 곳에는 자신들이 주장하고픈 이야기를 쓴다.
 
하나의 예를 들어보도록 하자.
"강남의 암 발생률이 가장 높게 나왔다."  방송 2사(KBS, MBC)에서 9시 뉴스에 했던 제목이다.  강남구의 암 발생률이 다른 구에 비해서 높게 나왔다.  이것은 노무현 정권이 들어서면서 강낭 땅 값을 잡기 위한 수단으로 쓰였다.  마치 강남이 암 발생률이 높아서 살기 좋지 않다는 인식을 심어주고자 하는 편집자의 의도가 보인다.  그러나.. 실상은 이렇다.
 
신문을 읽어보면..
각 구의 암 발생률 및 암에 대한 사망률이 나온다.
강남구나 다른 구의 암 발생률은 그리 다르지 않다.  100명당 기준으로 했을 때 강남구가 1-2명 앞선 정도이다.  그러나 사망률을 보면.. 과연 강남구구나하는 것이 느껴진다.  예를 들어서 금천구의 경우에는 암발생률과 사망률이 거의 일치한다.  90%의 암 발생자가 사망을 하였다.  그러나 강남구는 다르다.  암발생자의 10%정도만 사망을 하였다.  그만큼 의료혜택을 많이 보았다는 이야기다.
강남구의 주민들은 건강검진을 자주 하며, 그에 의해서 암발생률은 오히려 높게 보일지 몰라도, 그만큼 조기치료를 해서 사망자수는 상당히 적다.
 
이러한 왜곡보도는 대부분 방송사가 많이 저지르는 행태이다.  방송사는 정권의 시녀역할을 톡톡히 하고 있다.  그것은 과거 박정희 정권부터 지금 노무현 정권에 이르러서까지 변한 것은 없다.
 
사실을 왜곡하면, 그에 의한 판단 역시 흐려질 수밖에 없다.  최근 정권에서 방송의 활용을 보면.. 정말 정나미가 떨어진다.  사실 왜곡이 너무 심해지고 있다.
 
왜곡보도라고 해서 과연 그들이 거짓말을 유포한다고 보지는 않는다.  그러나 자료를 냄에 있어서 그것의 의미가 정확하게 알려지지 않는다면.. 그것 역시 왜곡이다.  사실(fact)와 진실(trueth)는 차이가 있다.  아전인수(我田引水) 형태로 필요한 자료만 모으면.. 그것 역시 왜곡이다.
 
자 또 다른 예를 들어보자..
상위 6%의 사람이 국토의 40%의 땅을 가지고 있다라고 한다.  이것은 인구수 비례이고, 과거에 비해서 더 나빠졌다고 할 수 없는 이야기라는 것이다.  통계적으로 나온 사실이지만, 실상은 사람들의 감정을 건드리기 위해서 자료를 취사선택한 것이다.  마치 몇몇 부자들만 잘 사는듯한 느낌을 주게 하기 위함이다.
 
대기업 평균임금 역시 문제가 많다.. 마치 대기업들은 엄청난 임금을 주는 듯한 이미지를 심어주게 된다.  그러나 실상을 까보면 이것 역시 왜곡된 사실일 뿐이다.
 
점점 왜곡된 사실을 가지고 국민을 우롱하는 처사가 곳곳에서 자행되고 있다..
 
우리에게는 정론지나 정론방송이라는 것이 없다..
 
참으로 우울한 현실이다.  누구든 관심을 가지고 그 일을 보다 잘 살펴볼 생각은 안하고.. 잠깐의 귀뜀으로 노발대발하는 우리네 성격을 감안한다면.. 우리가 정권에 놀아나는 현실은 우리자 자초한 것이라고 봐도 상관이 없겠다..
 
부동산 대책을 위해서 과감하게 교육은 팽개치는 현 상태를 보면.. 가슴이 아프다. 
신고

'Column > Massmedia' 카테고리의 다른 글

PPL의 간접광고  (0) 2012.05.02
언론이란?  (0) 2011.09.16