KoreanFoodie's Study
Effective C++ | 항목 26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 본문
Tutorials/C++ : Advanced
Effective C++ | 항목 26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자
GoldGiver 2022. 10. 25. 16:18
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다!
항목 26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자
핵심 :
변수 정의는 늦출 수 있을 때까지 늦추자. 프로그램이 더 깔끔해지며 효율도 좋아진다!
다음 예시를 보자.
std::string encryptPassword(const std::string& password)
{
using namespace std;
string encrypted;
// 1. encrypted 와 관련 없는 일
...
// 2. encrypted 와 관련 있는 일
...
return encrypted;
}
1번에서 예외가 발생해서 의미없게 encrypted 를 사용할 수도 있다. 이는 비효율적이다! 또한 생성 후 값을 대입하지 말고 생성과 동시에 초기화를 하면 쓸데없는 기본 생성자 호출 비용을 줄일 수 있을 것이다.
그렇다면 루프의 경우는 어떨까?
Widget w;
for (int i = 0; i < n; ++i)
{
w = i에 따라 달라지는 값;
...
}
루프 바깥쪽에 w 를 선언하면 생성자, 소멸자 1번 + 대입 n 번의 비용이 든다. 루프 안쪽에 선언하면 생성자와 소멸자를 n 번 호출해야 한다. 이 경우에는 루프 바깥쪽에 변수를 선언하는 방법이 더 좋을 수도 있다.
하지만 '대입이 생성자-소멸자 쌍보다 비용이 덜 들고', '전체 코드에서 수행 성능에 민감한 부분을 건드리는 중' 이 아니라면, 루프 안쪽에 변수를 선언하는 것이 좋다!
'Tutorials > C++ : Advanced' 카테고리의 다른 글
Effective C++ | 항목 28 : 내부에서 사용하는 객체에 대한 '핸들'을 반환하는 코드는 되도록 피하자 (0) | 2022.10.25 |
---|---|
Effective C++ | 항목 27 : 캐스팅은 절약, 또 절약! 잊지 말자 (0) | 2022.10.25 |
Effective C++ | 항목 25 : 예외를 던지지 않는 swap 에 대한 지원도 생각해 보자 (0) | 2022.10.25 |
Effective C++ | 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 (0) | 2022.10.25 |
Effective C++ | 항목 23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자 (0) | 2022.10.25 |
Comments