코딩하는 오징어
참조자(reference) 본문
안녕하세요. 코딩하는오징어 입니다. 오늘은 참조에 대해서 알아보려합니다. 사실 참조변수는 java에서도 똑같이 적용되는 부분이죠? 여기는 C++게시판이니 C++에 관점에서 살펴보도록 하겠습니다.
먼저 참조변수를 선언할 때 룰 부터 외워두고 갑시다. 룰은 룰이니 그냥 외우세요. 참조자는 변수에 대해서만 선언이 가능하고, 선언됨과 동시에 누군가를 참조해야만 합니다. 즉, 다음의 선언은 유효하지 않습니다.
int &ref = 20;
20은 변수가 아니라 상수죠??
int &ref;
ref = var;
선언과 동시에 초기화 되어야하는데 룰에 어긋났기 때문에 이러한 선언도 안됩니다.
자, 그럼 룰은 룰대로 외워주시고 참조자에 대해 설명해드리겠습니다.
참조자는 변수에 별명을 붙여준다고 생각하면 편리합니다. 사실 참조자는 기본자료형에 쓰이기보다는 객체(클래스로부터 만들어진 인스턴스)를 주고 받을 때 쓰기 위해 만들어 졌다고 생각합니다. (자료형이 기본형인 변수나 특히, 배열 같은 경우는 포인터가 편해요 그냥)
예제 코드를 보겠습니다.
먼저 변수 선언부를 잘 보시면 num1 과 num2는 흔히 볼 수 있는 그냥 int형 변수입니다. 그 다음줄인 int &num3을 보겠습니다. 그렇습니다. &를 앞에 붙이고 naming을 하시게되면 참조변수를 선언한 것입니다. num1에 num3이라는 별명을 붙여준 것입니다. 제가 저의 이름을 부르면 뒤돌아보기도 하지만 야! 오징어!라고 해도 뒤돌아보는 상황이 되는것입니다. num1을 이용해서도 num1의 공간을 사용할 수 있고 num3을 이용해서도 num1의 공간을 사용할 수 있는 것입니다. 그런데 코드 13번줄을 보시면 num3에 또 num4라는 별명을 붙여준 것을 볼 수 있습니다. 참조변수를 대상으로 참조자를 또 줄 수 있는 것입니다. 즉, num3에 num4라는 별명을 붙여줌으로써 num1의 공간을 num4를 이용하여 사용할 수 있는것이지요.
위 그림처럼 별명이 마구 붙여진 상황입니다. 출력결과를 확인해 봅시다. num3와 num4에 num1의 값 10이 출력된 것을 볼 수 있습니다. 그럼이제 실제로 공간도 사용할 수 있는 것인지 Swap함수를 이용하여 확인해 봄으로써 참조자에 대한 설명을 마치겠습니다. 참조자를 다 설명하진 않았습니다. 나머지 내용들은 클래스를 공부하고 추가적으로 설명하겠습니다.
보통 Swap함수를 포인터로 구현을 합니다. 어떤 배열을 위해 Sort하기위해 필수적으로 쓰이는 함수입니다. 네 포인터로 구현하세요. 아까도 말씀드렸듯이 참조자는 클래스를 위한 것이라고 생각하시면 됩니다. 참조자에대해 알아보이기위해 이렇게 Swap을 구현한 것입니다. Swap함수의 매개변수를 보시면 알겠지만 저런식으로 parameter를 설정하시면 됩니다. argument를 보시면 num3과 num2를 Swap 하였습니다. 하지만 실제적으로는 num1의 공간과 num2의 공간에 있는 값들이 Swap된 것입니다. 별명을 이용하여 공간을 활용 할 수 있구나라는 느낌을 얻으셨으면 충분합니다.
추가적으로 참조값을 반환할 수 도 있습니다. 하지만 좋지않은 코딩입니다. 이 부분은 객체의 참조값을 반환하는 경우 때문인데요. 이것은 클래스부분에서 심도있게 다뤄보도록 하겠습니다. ㅎㅎ 그럼 다음 글로 뵙겠습니다. 코딩하는오징어 였습니다.
'Language > C++' 카테고리의 다른 글
C++의 클래스 생성자 & 소멸자 (1) | 2017.10.09 |
---|---|
C++에서의 동적할당과 해제(new & delete) (0) | 2017.10.06 |
함수 오버로딩(function overloading)과 매개변수의 디폴트 값 (0) | 2017.09.26 |
네임스페이스(namespace) (1) | 2017.09.25 |
visual studio DEBUG (0) | 2017.09.17 |