프로그래밍을 처음 시작하는 사람들일 수록
for문등을 사용할때 i++를 많이 사용하는 경향들이 있다.
과연 저 방법은 프로그래밍에서는 ++i보다 좋은 방법일까?
오늘은 i++ 와 ++i를 비교 해보고 둘중 무엇을 사용해야지 더 좋은 프로그램에 좀더 가까워 질수 있는지 알아 보겠다.
이둘은 언뜻 보기에는 차이가 없어 보이나,
내가 직접 구현을 해보면 그 차이를 알수가 있다.
class INT
{
int val;
public:
INT() { };
INT(int n ): val{ n } {}
//++INT :prefix increment operator
INT& operator++() {
++val;
return *this;
}
//INT++ :postfix increment operator
INT operator++(int) {
INT temp{ *this };
++(*this);
return temp;
}
};
내가 직접 구현한 클래스 내부에 operator++로 prefix increment와 postfix increment를 따로 구현 해봤다.
postfix increment의 경우 한줄이 더 들어간다.
각줄을 분석해보면,
//INT++ :postfix increment operator
INT operator++(int) {
INT temp{ *this }; //임시객체
//return val; //내 현재 값을 리턴한다.
++(*this); //그 후에 나를 1증가 시킨다.
return temp;
//이렇게 하면 메모리가 왔다가 갔다가 하는 헛 삽질을 한다.
//그렇기에 아무도 사용하지 않는다. 라는 결론이 나오게 된다.
}
결론은 prefix increment를 사용하자는 것이다.
물론 누군가는 "야 오바하지 마라 저 한줄 늘어난거 가지고 너처럼 난리냐?"라고 할수도 있다.
그러나 나의 생각은 다르다.
저러한 연산자 하나도 내부가 어떻게 구현이 되어 있는지 파악하고,
그렇기에 무엇이 더 좋은지를 아는 프로그래머의 자세와 지식의 범위 깊이는
그것들을 모르는 프로그래머의 자세와 지식과는 다르기 때문이다.
'Programming > C C++' 카테고리의 다른 글
operator Overloading (0) | 2021.01.07 |
---|---|
Garbage Collection & Reference Counting (0) | 2020.10.22 |
Lambda를 써야하는 이유와 사용 방법 (0) | 2020.10.16 |
C++ 정적 바인딩과 동적 바인딩 (0) | 2020.09.29 |