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 번 호출해야 한다. 이 경우에는 루프 바깥쪽에 변수를 선언하는 방법이 더 좋을 수도 있다.
하지만 '대입이 생성자-소멸자 쌍보다 비용이 덜 들고', '전체 코드에서 수행 성능에 민감한 부분을 건드리는 중' 이 아니라면, 루프 안쪽에 변수를 선언하는 것이 좋다!

Comments