-
오늘도 쓰는 기술 면접!
오늘 강의에서 기술면접에 대한 중요성을 많이 들었기 때문에 열심히 해보려고 합니다.
2. 'ref'와 'out'의 사용 시 차이는 무엇인가요?
ref는 초기화를 해준 변수를 사용하여 메서드 내에서 값을 입력 받아 바뀐 값을 유지합니다. out은 초기화가 필요 없으며, 메서드 내에 값을 받아 변한 값은 메서드 내에서만 바뀐 값을 유지하여 사용된 메서드 외에서는 바뀌지 않는 값들을 사용합니다.
좀 더 쉽게 이해할 수 있는 글이 있어서 가져와봅니다.
ref는 함수 바깥에서 참조를 받아 참조 자체를 전달, out은 함수 내에서 바깥으로 전달
시작지점이 다르다 라고 생각하면 좋을 것 같습니다.
여기서 의문이 듭니다. ref를 쓰는 이유는 무엇인가?
왜냐하면 ref를 쓰지 않는다해도 매개변수로 받는 값을 변형시켜서 그대로 유지할 수 있기 때문입니다.
int a = 5; public void Test1(int i) { i = 10; a = i; } public void Test2(ref int i) { i = 10; }
하지만 코드에서 보이듯이 결과적으로는 같지만 추가 작업이 필요합니다.
또한, ref를 사용하지 않는다는 것은 매개변수에서 받아오는 값을 복사해서 사용하는 것이므로 매개변수로 사용된 변수의 값은 변하지 않습니다. 추가작업이 없다면요.
값을 변화시키기 위해서 추가작업이 필요하다는 것은 그만큼 메모리 사용이 있다는 것입니다.
ref는 매개변수 그 자체를 가져오기 때문에 새로운 메모리 소모가 없고, 원래 있던 메모리에서 값을 변형시키는 것입니다.
여기서 더 나아가면 왜 참조를 해야할까? 에 대한 대답도 될 수 있을 것이라 생각됩니다.
더 깊은 내용도 있기도 하겠지만, 간단한 대답으로는 ref를 쓰는 이유와 같다라고 할 수 있을 것 같습니다.
ref와 out을 설명해주고, 추가적인 질문도 받아서 열심히 설명해준 팀원들 감사합니다. ( _ _ )