지연평가와 선행평가에 대해서 어느정도 감이 오는 사람이라면, 아주 손쉽게 이해되는 장이다.
변수 정의를 늦출수 있게 된것은 C++의 어디에서건 변수를 선언 할수 있게 만들어 줌으로써 생겨난 방법일것이다.
왜 늦출 수 있는 데까지 늦추어야 하는가?
가장 큰 이유는 변수의 생성 대입 초기화 라는 작업이, 일어날 필요가 없게 될 경우가 생기기 때문이다. 예를 들어서, 아주 큰 객체를 생성하여 대입하고 하고, 특정 함수를 작업하고, 다시 선언된 큰 객체를 사용하고 날려 버리는 작업이 있다고 했을때, 특정 함수에서 .. 오류가 나서, 이 이 객체를 쓰지도 못하게 되었다고 친다면, ... 이해가 쉽게 갈것이다.
{
string encrypted;
if(password.lengh() < MinimumPasswordLength)
{
throw logic_error("Password is too short");
}
....
return encrypted;
}
이렇게 되었을때 예외가 발생하면 encryted 객체는 생성할 필요조차 없게 된것이다.
무조건 늦추는것이 좋은것인가?
이건 또 아니다. 선행평가 함으로써 얻을수 있는 이익이 있다면 그때는 선행 평가를 해야만 한다.
다른 최적화 방법은 없는가?
루프문안에 선언된 변수에 대해서 생각해 볼수도 있다. 루프문안에 넣을때, 가독성은 높아지지만, 반대로 루프 돌때 계속 연산되어진다는 점이 있고, 루프밖에 놓는다고 했을때는 이 반대이다.
각 상황에 맞게 판단하여 사용하는게 좋을듯 싶다.
이것만은 잊지 말자!
1. 변수 정의는 늦출 수 있을 때까지 늦추자.
관련 링크
http://ikpil.tistory.com/328
http://ikpil.tistory.com/372
http://zlqhem.springnote.com/pages/152648
http://kelly.springnote.com/pages/554763
변수 정의를 늦출수 있게 된것은 C++의 어디에서건 변수를 선언 할수 있게 만들어 줌으로써 생겨난 방법일것이다.
왜 늦출 수 있는 데까지 늦추어야 하는가?
가장 큰 이유는 변수의 생성 대입 초기화 라는 작업이, 일어날 필요가 없게 될 경우가 생기기 때문이다. 예를 들어서, 아주 큰 객체를 생성하여 대입하고 하고, 특정 함수를 작업하고, 다시 선언된 큰 객체를 사용하고 날려 버리는 작업이 있다고 했을때, 특정 함수에서 .. 오류가 나서, 이 이 객체를 쓰지도 못하게 되었다고 친다면, ... 이해가 쉽게 갈것이다.
{
string encrypted;
if(password.lengh() < MinimumPasswordLength)
{
throw logic_error("Password is too short");
}
....
return encrypted;
}
이렇게 되었을때 예외가 발생하면 encryted 객체는 생성할 필요조차 없게 된것이다.
무조건 늦추는것이 좋은것인가?
이건 또 아니다. 선행평가 함으로써 얻을수 있는 이익이 있다면 그때는 선행 평가를 해야만 한다.
다른 최적화 방법은 없는가?
루프문안에 선언된 변수에 대해서 생각해 볼수도 있다. 루프문안에 넣을때, 가독성은 높아지지만, 반대로 루프 돌때 계속 연산되어진다는 점이 있고, 루프밖에 놓는다고 했을때는 이 반대이다.
각 상황에 맞게 판단하여 사용하는게 좋을듯 싶다.
이것만은 잊지 말자!
1. 변수 정의는 늦출 수 있을 때까지 늦추자.
관련 링크
http://ikpil.tistory.com/328
http://ikpil.tistory.com/372
http://zlqhem.springnote.com/pages/152648
http://kelly.springnote.com/pages/554763
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 31: 파일 사이의 컴파일 의존성을 최대로 줄이자 (0) | 2008.07.02 |
---|---|
항목 30: 인라인 함수는 미주알고주알 따져서 이해해 두자 (0) | 2008.07.01 |
항목 29: 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! (0) | 2008.07.01 |
항목 28: 내부에서 사용하는 객체에 대한 '핸들'을 반환하는 코드는 되도록 피하자. (0) | 2008.06.28 |
항목 27: 캐스팅은 절약, 또 절약! 잊지 말자. (0) | 2008.06.26 |
항목 25: 예외를 던지지 않는 swap에 대한 지원도 생각해 보자 (0) | 2008.06.24 |
항목 24: 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멘버 함수를 선언하자 (0) | 2008.06.15 |
항목 23: 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자. (0) | 2008.06.07 |
항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (0) | 2008.06.07 |
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2008.06.07 |
최근댓글