참조와 값 복사의 실행속도 차이

알고리즘 문제를 풀다가 다른 분의 코드와 시간 복잡도 상에서는 거의 차이가 없는 것 같은데,
왜 이렇게 차이날까 하던 적이 있었다. 
뭘까 뭘까 하면서 열심히 찾다가 값 복사에 의한 속도 차이였음을 알았다.
실제로 STL중에 vector 변수를 쓰다가 변수를 읽거나 변경할 때 그냥 넘겨주었던 경우가 있었다. 

따라서 기본형의 변수가 아니면 C++, C# 기준으로, &(레퍼런스, 참조자)를 적극 활용하자.
(C, Java는 참조자가 없지만 객체의 주소를 넘기는 방식인
pass-by-address로 전달 가능하며, Java는 따로 키워드를 쓸 필요가 없고, C는 *를 써서 가능하다. )
https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value


* 혼동을 위한 정리
C++, C# : pass-by-value, pass-by-reference
C, Java : pass-by-value, pass-by-address

pass-by-value : 똑같이 복사하는 것 (별개의 데이터가 하나 더 생긴다.)
pass-by-address : 값이 저장된 주소를 복사하는 것 (값만 바꿀 수 있고, 원래의 변수 상태를 바꿀 수 없다.)
pass-by-reference : 변수 그 자체를 참조하는 것 (값과 원래의 변수 그 자체를 바꿀 수 있다.)

댓글

이 블로그의 인기 게시물

[PS] BOJ 20543번 폭탄 던지는 태영이

프로그래밍에서 실수형의 부정확성

프로그래머스 2019 윈터코딩 온라인 테스트를 보았다. (풀이)