프로그래밍

[C++] Philosophy 11, 12 & 13

하루삼십만원 2020. 12. 4. 23:39
반응형

[C++] Philosophy 11 : Encapsulate messy constructs, rather than spreading through the code

 

Reason 지저분한 코드는 버그를 숨기고 유지 보수하기 더 어렵다. 좋은 interface는 사용하기 쉽고 안전하다. 지저분하고 낮은 수준의 코드는 또 다른 지저분한 코드를 더 많이 만들어 낸다.

 

Example

이것은 low-level이고 verbose(장황하며) error-prone(오류가 발생하기 쉽다). 예를 들어, 우리는 memory exhaustion(기억력 소진)을 테스트하기 위해 "잊어버렸다". 대신 vector를 사용할 수 있다.

 

Note

standard library와 GSL은 이 철학의 예들이다. 예를 들어 vector, span, lock_guard, future 등 핵심 추상화를 구현하는 데 필요한 arrays, union, cast, 까다로운 lifetime 문제, gsl:::owner 등을 교란하는 대신, 우리는 보통 우리가 가지고 있는 것보다 더 많은 시간과 전문지식을 가진 사람들이 설계하고 구현하는 libraries을 이용한다. 마찬가지로, 우리는 low-level의 코드를 반복적으로 잘 얻어야 하는 challenge를 사용자(종종 우리 자신)에게 맡기기 보다는 좀 더 전문화된 libraries을 설계하고 구현해야 한다. 이것은 이 지침의 기초가 되는 상위 집합 원칙의 하위 집합의 variant이다.

 

Enforcement

복잡한 포인터 조작 및 추상화 구현 이외의 캐스팅과 같은 "지저분한 코드"를 찾아보십시오.

 

원문 링크

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p10-prefer-immutable-data-to-mutable-data

 

C++ Core Guidelines

 

isocpp.github.io

[C++] Philosophy 12 : Use supporting tools as appropriate

 

Reason 기계에 의해 더 잘 수행되는 많은 것들이 있다. 컴퓨터는 반복적인 작업에 지치거나 지루해지지 않는다. 우리는 통상적으로 일상적인 일을 반복하는 것보다 더 좋은 일을 한다.

 

Example 

정적 분석기를 실행하여 코드가 준수할 지침을 따르는지 확인하십시오.

 

Note

● Static analysis tools

Concurrency tools

● Testing tools

소스 코드 리포지토리, 빌드 툴 등 다른 종류의 툴이 많지만, 이러한 툴은 본 가이드라인의 범위를 벗어난다.

 

Note

지나치게 elaborate하거나 지나치게 전문화된 tool chain에 의존하지 않도록 주의한다. 그것들은 당신의 portable 코드를 non-portable로 만들 수 있다.

 

원문 링크

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p12-use-supporting-tools-as-appropriate

 

C++ Core Guidelines

 

isocpp.github.io

[C++] Philosophy 13 : Use support libraries as appropriate

 

Reason

잘 설계되고, 문서화되고, 잘 지원된 라이브러리를 사용하면 시간과 노력을 절약할 수 있다. library의 품질과 문서화는 대부분의 시간을 구현에 소비해야 하는 경우 할 수 있는 것보다 더 크게 될 수 있다. library의 비용(시간, 노력, 돈 등)은 많은 사용자들이 공유할 수 있다. 널리 사용되는 library은 개별 애플리케이션보다 최신 상태로 유지되고 새로운 시스템에 포팅될 가능성이 높다. 널리 사용되는 library에 대한 지식은 다른/미래 프로젝트에서 시간을 절약할 수 있다. 따라서 응용 프로그램 도메인에 적합한 library가 있으면 해당 library를 사용하십시오.

 

Example

당신이 알고리즘 분류에 전문가이고 충분한 시간을 가지고 있는 것이 아니라면, 이것은 당신이 특정 애플리케이션에 쓰는 어떤 것보다 더 정확하고 더 빨리 실행될 가능성이 높다. standard library(또는 응용 프로그램이 사용하는 foundational libraries)를 사용하지 않는 다면 반드시 이유가 있어야 한다.

 

Note

ISO C++ Standard Library

Guidelines Support Library

 

Note

만약 중요한 domain에 대해 잘 설계되고, 문서화되고, 잘 지원된 library가 존재하지 않는다면, 당신은 그것을 디자인하고 구현한 다음 그것을 사용해야 할 것이다.

 

원문링크

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p13-use-support-libraries-as-appropriate

 

C++ Core Guidelines

 

isocpp.github.io

 

 

반응형

'프로그래밍' 카테고리의 다른 글

[C++] GSL:Guidelines Support library (2nd)  (0) 2020.12.11
[C++] GSL:Guidelines Support library (1st)  (0) 2020.12.10
[C++] Philosophy 9 & 10  (0) 2020.12.03
[C++] Philosophy 7 & 8  (0) 2020.12.02
[C++] Philosophy 5 & 6  (0) 2020.12.01