11. Type Safety

타입 안정성에 대해 알아보자.

90. Avoid type switching: prefer polymorphism.

스위치를 꺼라: 오브젝트의 타입을 스위치해서 동작을 커스텀화하는 것을 피하라. 템플릿과 가상 함수를 써서 타입들이 (그들을 호출하는 코드가 아니라) 그들의 동작을 결정하도록 하라.

91. Rely on types, not on representations.

오브젝트를 X-레이하지 마라. 오브젝트가 메모리 내에서 어떻게 정확히 표현되는지에 대해 가정하지 마라. 그 대신, 타입들이 그 오브젝트가 어떻게 쓰여지고 메모리로부터 읽어지는지 결정하도록 하라.

92. Avoid using reinterpret_cast.

거짓말은 잡기 쉽다. reinterpret_cast를 써서 컴파일러가 한 타입의 오브젝트를 다른 타입의 오브젝트의 비트로 재표현하도록 하지 마라. 이는 타입 안전성을 유지하는 것에 반하는 것이며, reinterpret_cast는 그것을 하거나 다른 무언가를 하도록 보장되어 있지도 않다.

93. Avoid using static_cast on pointers.

동적 오브젝트에 대한 포인터는 정적 캐스팅되지 않는다. dynamic_cast로부터 재설계를 위한 리팩토링까지 더 안전한 대안들이 많다.

94. Avoid casting away const.

어떤 거짓말은 벌을 받아야 한다. const를 캐스트해 없애버리는 것은 가끔 정의되지 않은 행동을 낳으며, 이는 올바른 경우라도 형편없는 프로그래밍 스타일의 예이다.

95. Don’t use C-style casts.

연령이 항상 지혜를 뜻하는 것은 아니다. C-스타일 캐스트는 맥락에 따라 다른 (그리고 종종 위험한) 의미를 가지며, 이 모든 것이 단일 문법에 숨겨져 있다. C-스타일 캐스트를 C++-스타일 캐스트로 대체하는 것은 예상하지 못한 오류들로부터 방어하는 데 도움을 준다.

96. Don’t memcpy or memcmp non-PODs.

오브젝트를 X-레이를 찍으려 하지 마라. std::is_trivial_v, std::is_standard_layout_v를 만족하는 오브젝트가 아니라면 memcpy나 memcmp를 이용해서 복제나 비교를 할 생각을 하지 마라.

97. Don’t use unions to reinterpret representation.

속임수는 여전히 거짓말이다. 공용체는 한 멤버를 쓰고 다른 것을 읽음으로써 캐스트 없는 캐스트를 얻는 데 있어 악용될 수 있다. 이는 더 암시적이고 reinterpret_cast보다도 덜 예측적이다.

98. Don’t use varargs (ellipsis).

타원들은 붕괴를 일으킨다. 생략 부호는 C로부터의 위험한 이어짐이다. varargs를 피하고, 고수준 C++ 형성이나 라이브러리를 써라.

99. Don’t use invalid objects. Don’t use unsafe functions.

유통 기한이 지난 약을 쓰지 마라. 그릇된 오브젝트나 역사적이지만 안전하지 않은 함수는 프로그램의 건강에 재앙을 일으킨다.

100. Don’t treat arrays polymorphically.

배열들은 잘못 조절되었다. 배열들을 다형적으로 다루는 것은 중대한 타입 오류로 컴파일러도 이에 대해 조용할 것이다. 함정에 빠지지 말라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중