{
이번 항목은 함수의 매개변수를 무엇으로 정하는게 좋을까? 란 말과 같다. 매개변수야 필요한 것을 필요한 만큼 인자로 만들면 되지 않을까? 라고 생각 할 수도 있겠지만, C++ 에선 "클래스" 라는 개념이 있기 때문에, 좀 까다로운 것들이 많이 있다.
예를 들자면, 자신의 복사 갯수를 카운팅하는 객체, 소유권 개념이 있는 객체, 스마트 포인터, 다른 것을 카운팅 하는 객체, 데이터 크기가 매우 큰 객체, 또는 매우 작은 객체, 복사 되지 않는 객체, 10개까지만 복사 되는 객체 등... 사용 상에 필요한 용도로 만들어진 이러한 객체들은 "함수의 매개변수로 어떻게 전달 할까?" 를 고민해 봐야 한다.
또는 함수 내부에서 변경될 수 있는가? 에 대한 고민도 같이 해서 const 를 붙여야 하는가? 말이야 하는가? 참조로 받아야 하는가? 포인터로 받아야 하는가? 복사해서 받아야 하는가? 등 도 생각해 봐야 한다.
나는 이렇게 했다.
1. 카운팅 할 필요가 없다면, 복사 생성자를 호출하지 않도록, 참조나 포인터로 전달한다.
2. 함수 내부에서 변경되지 않는다면 const를 항상 붙여준다.
3. 만약 값이 변경된다면, 포인터로 전달하고, 값이 변경 안된다면 const reference 형태로 전달 한다.
4. 기본 타입들에 대해선 그냥 복사 전달 한다.
5. 임시 객체로 전달될 수 있는 상황이 많다면, 객체의 복사 생성자로 인하여 객체를 생성하는게 좋다.
6. 복사 생성자가 호출 할 수 없다면, 참조나 포인터로 넘긴다.
등이 있다.
아마도 코딩을 하다 보면, 특수한 객체들을 만들어야 할 때가 있는데, 한번 겪어 보는게 더 쉽게 이해 갈 듯 하다.
}
최근댓글