본문 바로가기

Programming62

[ Synology DS211 NAS ] SVN 설치 및 apache 연동 DSM 에서 Telnet, SSH 활성화 ssh나 telnet으로 NAS에 접속 ikpg 설치 /volum1/@tmp로 이동 [ cd /volum1/@tmp ] NAS에 맞는 Bootstrap 다운로드 [ wget http://wizjos.endofinternet.net/synology/archief/syno-mvkw-bootstrap_1.2-7_arm-ds111.xsh ] * 주의 DS211 용임 DS211 모델은 Marvel Kirkwood m6282 ARM 실행 [ sh syno-mvkw-bootstrap_1.2-7_arm-ds111.xsh ] NAS 재부팅 [ reboot ] ipkg 업데이트 [ ipkg update ] ipkg 업그레이드 [ ipkg upgrade ] optware 설치 [ i.. 2011. 4. 11.
항목 12. 객체의 모든 부분을 빠짐없이 복사하자. 내용 객체의 안쪽 부분을 캡슐화한 객체 지향 시스템 중 설계가 잘 된 것들을 보면, 객체를 복사 하는 함수가 딱 두개만 있는 것을 볼 수 있다. 이 둘을 복사 생성자와 복사 대입 연산자라 하고, 이 둘을 통틀어 객체 복사 함수(copying function)라 부른다. 컴파일러가 생성한 복사 함수는 기본적인 요구에 충실하다. 복사되는 객체가 갖고 있는 데이터를 빠짐없이 복사한다. 주의점 만약 컴파일러가 만든 기본 동작에 마음에 안들어 직접 복사 함수를 선언한다면 다음과 같은 것들을 지켜야 한다. 기존 클래스에 멤버를 추가하면 복사 함수를 수정 해줘야 한다. 파생 클래스에서 기본 클래스의 복사 함수를 호출 하도록 만들어야 한다. CBase { ... } CTest { private: INT m_iMembe.. 2009. 2. 17.
항목 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 내용 자기대입(self assignment) : 어떤 객체가 자기 자신에 대해 대입 연산자를 적용 하는 것을 말한다. a[i] = a[j]; 또는 *px = *py; 는 자기대입의 가능성을 가지고 있는 문장이다. 어뜻 보기에 명확하지 않은 이러한 자기대입이 생기는 이유는 여러 곳에서 하나의 객체를 참조하는 상태, 즉 중복참조(aliasing)라고 불리는 것 때문이다. 그렇기 때문에, 같은 타입으로 만들어진 객체 여러개를 참조자 혹은 포인터로 물어 놓고 동작하는 코드를 작성할 떄는 같은 객체가 사용 될 가능성을 고려 하는것이 일반적으로 바람직한 자세이다. 해결법 operator=의 첫머리에서 일치성 검사(identity test)를 통해 자기대입을 점검한다. 자기대입의 경우 많이 일어나는 것이 아니기 때문.. 2009. 2. 17.
항목 10. 대입 연산자는 *this 참조자를 반환하게 하자 이유 일종의 관례이므로 관례를 지키는 것이 좋다. 내용 C++의 대입 연산은 x = y = z = 15; 처럼 여러 개가 사슬 처럼 엮일 수 있다. 이처럼 대입 연산이 사슬처럼 엮이려면 대입 연산잔가 좌변 인자에 대한 참조자를 반환하도록 구현이 되어 있다. 이런 구현은 일종의 관례(convention)인데, 나름대로 만드는 클래스에 대입 연산자가 혹 들어간다면 이 관례를 지키는 것이 좋다. 이것만은 잊지 말자! - 대입 연산자는 *this의 참조자를 반환하도록 만들자. 관련링크 http://ikpil.tistory.com/412 http://redinlife.egloos.com/1604282 2009. 2. 15.
항목 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자. 이유 1. 호출한 결과가 원하는 대로 돌아가지 않을 것이다. 2. 제대로 돌아간다 해도 폭탄을 가지고 있는 것과 같다. 설명 파생 클래스 객체가 생성될 때 그 객체의 기본 클래스 부분이 파생 클래스 부분보다 먼저 호출된다. 그렇기에 기본 클래스의 생성자가 호출될 동안에는, 가상 함수는 절대로 파생 클래스 쪽으로 내려가지 않는다. 기본 클래스 생성자는 파생 클래스 생성자보다 먼저 실행되기 때문에, 기본 클래스 생성자가 돌아가고 있을 때 파생 클래스 데이터 멤버는 아직 초기화 된 상태가 아닌 것이 핵심이다. 객체가 소멸 될 때는 파생 클래스의 소멸자가 일단 호출되고 파생 클래스만의 데이터 멤버는 정의되지 않은 값으로 가정하기 때문에, C++은 이들을 없는 것처럼 취급하고 진행한다. 기본 클래스 소멸자에 진입.. 2009. 2. 15.
Chapter 5.1 Ase Materal D3D와 3D Max는 Matrerial에 대해서 다른 개념을 가지고 있다. 3D Max의 Material은 D3D Material + D3D Texture 3D Max의 Material은 다층 구조 Material D3D는 Material이 하나의 Material정보만을 가지고 있다. 그러나 3D Max에서는 Material이 하나의 Material이 여러 개의 Sub Material을 가질 수 있다. 그리고 그 Sub Material은 다시 또 하나의 Material로 인식되어 자신의 Sub Material을 가질 수 있다. 다양한 3D Max의 Material 3D Max의 Material은 다양한 계층구조 방법과 이론적으로 다양한 방법의 계산법.. 2008. 9. 30.