항목 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. 문자열이나 배열에 대한 레퍼런스 반환시에는 [] 도 염두해 두어야 한다.
이유 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. 문자열이나 배열에 대한 레퍼런스 반환시에는 [] 도 염두해 두어야 한다.
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 27. 의도하지 않은 내부 생성 맴버 함수의 이용을 명시적으로 막는다. (0) | 2008.05.10 |
---|---|
항목 26. 잠재적 모호성을 경계한다. (0) | 2008.05.10 |
항목 25. 포인터나 수치형 타입상의 오버로딩을 피한다. (0) | 2008.05.10 |
항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다. (0) | 2008.05.10 |
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. (0) | 2008.05.10 |
항목 21. 가능한 const를 이용한다. (0) | 2008.05.10 |
항목 20. 데이터 멤버를 공용 인터페이스에 포함시키지 않는다. (3) | 2008.05.09 |
항목 19. 멤버 함수, 비멤버 함수 및 프렌드를 구별한다. (0) | 2008.05.09 |
항목 18. 최소한의 완전한 클래스 인터페이스를 구축한다. (0) | 2008.05.09 |
3부, 클래스와 함수 : 설계 및 선언 (0) | 2008.05.08 |
최근댓글