{
음... 난 이 제목을 보고 느끼는 것이 있다., "한글로 하면, 항상 어렵다." 는 것인데, 뭐 .. 어쩔수 없다. 마땅히 우리나라 말로 옮길 수 있는 단어는 저런거 밖에 없기 때문이지 않을까? 본론으로 빠르게 돌아가서 저 제목이 의미하는 바 가 무엇인지 알아 보자.
표준적인 형식이란?
말 그대로 표준적인 것들을 뜻하는데, 이 표준적인 것들은 많이 있지만, 여기에서 말하고자 하는 "표준적인 형식"이란, 바로 연산자 즉, operator에 대한 표준적인 형식을 뜻하는 것이다.
그렇다면 이런 표준적인 형식은 정확히 어떤 형식인가?
바로 C++ 표준에서 산술 및 할당 연산자를 구현할 때, 사용하는 형식, 즉, 산술 연산자를 구현할 떄는 산술 할당 연산자와 산술 연산자 두개를 제공해야 하며, 산술 연산자는 산술 할당 연산자로 구현해야 한다는 것, 이것이 바로 표준적인 형식의 코딩 법이다. 이렇게 말로만 하면 분명 헷갈리는 "산술 할당 연산자"와 "산술 연산자"의 차이점을 알아 보는게 좋을것 같다.
산술 할당 연산자란?
a += b; <-- 여기서 보이는 "+=" 연산자가 바로 산술 할당 연산자라 부른다.
산술 연산자란?
a = a + b; <-- 여기서 보이는 "+" 연산자가 바로 산술 연산자라 부른다.
그렇다면 왜~ 산술 할당 연산자를 이용해서 산술 연산자를 구현하는게 좋은가? 때로는 별개의 코드로 짤 수도 있는데, 말이다. 그 이유는 강아지는 강아지~ 사슴은 사슴~ 고양이는 고양이인데, 만약 경우에 따라서 강아지는 고양이, 사슴은 강아지, 고양이는 사슴 이라고 말을 해 보자.
헷갈리지 않는가? 모두들 표준적인 것으로 사용했다고 알고 코딩하고 있기 때문에, .. 헷갈리게 하면 그게 좋을 수 있겠는가? 당연히 좋지 못하다. 그러므로 "표준적인 형식"을 따르는것이 좋다. 물론~ 성능에 영향을 많이 미치어, 어쩔수 없이 다르게 구현을 해야 하는 경우도 있을 것이다.(물론 나는 겪어 본적이 없다.) 그때는 주석을 잘~ 달아 주면 될 것이다., 하지만 굳이 연산자를 오버로딩 할 필요가 있는지? 에 대해서 생각해 봐야 할 것이다.
개인적으론 연산자는 필요한 경우가 아니라면, 아예 내비 두는게 더 좋다고 생각 한다.( 이 항목에 대해선 스콧 마이어스의 Effective C++ 3판과 2판에 대해서 언급하고 있다.)
여기에 대한 소스코드는 STL의 iterator 코드를 보면 정확히 나온다. 물론 std::vector<T>::iterator 를 봐야 할 것이다.
연산자를 제공하는데 있어, 조심해야 할 것이 있는가?
전역 연산자를 제공 할 때에는 암시적 형변환을 고려해야 한다. 여기에 대해서는 이번 항목에서 다루기 보다, Effective C++ 3판, 2판에서 지적했던 암시적 형변환 부분을 보는게 좋을것 같다.
}
최근댓글