일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Smart Pointer
- more effective c++
- 예외
- 스마트 포인터
- implicit conversion
- 암시적 변환
- 영화
- exception
- 티스토리챌린지
- 루아
- 언리얼
- 메타테이블
- 상속
- effective stl
- 게임
- c++
- 다형성
- virtual function
- 오블완
- UE4
- 함수 객체
- resource management class
- Effective c++
- 영화 리뷰
- operator new
- 비교 함수 객체
- lua
- reference
- 참조자
- 반복자
Archives
- Today
- Total
스토리텔링 개발자
[More Effective C++] 23. 적절한 라이브러리 선택하기 본문
728x90
항목 23 : 정 안되면 다른 라이브러리를 사용하자!
라이브러리 설계의 타협
- 이상적인 라이브러리란?
- 작고, 빠르고, 강력하고, 유연하고, 확장 가능하고, 직관적이고, 어디든 쓸 수 있고, 플랫폼 지원이 좋아야 하고, 사용상의 제약에 대해 자유롭고, 버그도 없어야 한다.
- 하지만 이 모든 걸 만족시키는 라이브러리란 있을 수가 없다.
- 각각은 트레이트 오프가 있다.
- 크기, 실행속도 / 이식성
- 많은 기능 / 직관성
우선순위가 다른, 비슷한 기능의 라이브러리
- iostream / stdio
- 둘 다 입출력 라이브러리지만, 구현과 성능상의 차이점이 있다.
- iostream의 장점
- 타입 안정성
- 확장성
- stdio의 장점
- 속도
// stdio 버전
scanf("%1f", &d);
printf("%10.5f", d);
// iostream 버전
cin >> d;
cout << setw(10) // 필드의 폭을 설정한다.
<< setprecision(5) // 소수부분 자릿수를 고정한다.
<< setiosflags(ios::showpoint) // 따라오는 0을 그대로 둔다.
<< setiosflags(ios::fixed) // 이 설정사항을 사용한다.
<< d;
// iostream 버전이 훨씬 타이핑하기 귀찮지만,
// operator<<는 printf에 비해 타입 안정성과 확장성을 갖추고 있다.
- 좀 더 생각해보기
- stdio의 효율은 구현 환경에 지극히 의존적이므로 속도 차이가 무의미할 수도 있다.
- 즉, 실제로 성능이 필요하다면 프로파일링을 해봐야 할 것이다.(항목 16 참조)
- iostream이 stdio보다 더 빠른 성능을 보여주길 기대하는 것도 터무니없진 않다.
- iostream은 컴파일 중에 피연산자의 타입을 결정한다.
- 그에 반해, stdio 함수는 서식화 문자열을 런타임에 해석한다.
- stdio의 효율은 구현 환경에 지극히 의존적이므로 속도 차이가 무의미할 수도 있다.
결론
- 비슷한 기능을 가진 라이브러리라도 어떤 철학에 따라 설계했느냐로 수행 성능성의 차이를 보일 수 있다.
- 그러므로 수행 성능이 문제라면 라이브러리를 바꾸는 것만으로 손쉽게 효율을 향상시킬 수 있다는 것을 유념하자.
728x90
'개발 > More Effective C++' 카테고리의 다른 글
[More Effective C++] 25. 함수를 가상 함수처럼 만들기 (4) | 2024.09.04 |
---|---|
[More Effective C++] 24. 다형성의 비용 (0) | 2024.09.03 |
[More Effective C++] 22. 대입 형태 연산자 선호하기 (0) | 2024.08.30 |
[More Effective C++] 21. 오버로딩으로 암시적 변환 막기 (0) | 2024.08.28 |
[More Effective C++] 20. 반환값 최적화(return value optimization) (0) | 2024.08.27 |
Comments