항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다.

이유 2008/06/06 23:27 수정
1. 효율성이 매우 떨어 진다.
2. 상속 받은 객체가 부모객체 메소드에 들어갈 경우, 값이 짤려버린다.
1. 파생 클래스의 객체를 값에 의한 복사를 이루어질 경우, 그 비용을 많이 지불하기 때문이다.
2. 또한 객체 복사는 슬라이싱 문제(slicing problem)가 파생 객체의 복사체에 일어 날수 있기 때문이다.


해결 방법
1. 레퍼런스로 전달 한다.


주의 사항 - 2008/06/06 23:27 수정
1. 레퍼런스를 사용할때는 모호성이 없는것을 보장해야만 한다.
2. int형 이하의 데이터이고, 복사본만 쓰면 되는 경우 call by value가 더 빠르고 더 효율적이다.
1. 레퍼런스를 사용 할때, const 붙여야 할때는 붙여야 한다. 예) const TYPE& tag;
2. 기본자료형 데이터일 경우에는 참조자보단, 객체 복사에 의한 전달이 더 효과적이다.
(사용자 정의형 내부가 int 하나만 있을때는 오히려 상수 객체 참조자로 전달하는게 좋다)


개인적인 생각
1. 레퍼런스는 확실히 포인터 보다 쓰기가 편하다. 그렇기 때문에 모호성이 잘 나타난다.
(이름처럼 쓰니 그게 레퍼런스인지 까먹을 때가 있곤 한다;)

2. 클래스의 private의 값을 레퍼런스로 뽑아 올 수 밖에 없을 때는 "정말 이렇게 밖에 방법이 없는가?" 에 대해서 생각해야 한다.

3. 문자열이나 배열에 대한 레퍼런스 반환시에는 [] 도 염두해 두어야 한다.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요