Untitled

https://github.com/POCU/COMP3200CodeSamples

<aside> 💡 목차


</aside>

C# & C++ UNIT

참조 개요 & 특징 펼치기

참조형의 장점?

→ 참조형을 썼을때의 장점

다음 본문의 코드를 참고했습니다

[포인터 vs 참조 - 참조를 이용한 swap() 함수](https://cybecho.notion.site/vs-swap-43dd383a6187433d8a1a4b62a4e679d7)

→→ 1️⃣ 매개변수에 NULL이 들어오는 걱정을 안해도 된다

_

<aside> 💡 매개변수에 포인터를 사용하는 경우


포인터에는 NULL이 들어가는 순간 코드가 망가질 수 있다.

호출자는 매개변수에 뭔 값을 넣을지 모르기 때문에, 매우 위험한 코드가 될 수 있는데

변수값에는 NULL 이 들어갈수도 있는데, 포인터 매개변수가 들어가면 NULL을 상시 체크해줘야해서 신중하게 선택해야함

Untitled

포인터를 함수의 매개변수로 사용했을때, number1, number2는 NULL이 들어갈 수 없다
호출자는 매개변수로 NULL을 넣을 수도 있는데, 

number1이나 number2에 NULL을 넣는 순간 코드는 뻑나죠?

그래서 되게 위험한 연산이 될 수가 있어요, 호출자가 뭔 짓을 할지 모르기 때문에, 
(예를들어, 방금 호출자가 포인터 변수에 NULL을 넣을수도 있으니까) 

쨌든 개발자는 이 코드를 짜면서

'이 swap() 함수에서는 NULL 체크해야 될까?'

'NULL 들어오면 어떡하지?' 

이런 고민을 계속 해야하는 단점이 있음..

</aside>

<aside> 💡 매개변수에 참조를 사용하는 경우

Untitled

그럼 C++에서 참조로 가져오면, 포인터에 비해서 무슨 장점이 있는데?

C++에서는 호출자가 뭔 짓을 할지 모르기때문에, 
기본적으로 참조 매개변수 number1, number2는 NULL을 대입할 수 없게 만들었다
즉, NULL 을 참조를하는것을 막아버린것이다!

고로 NULL이 애초에 들어올 수 없어서 C++에 참조 매개변수로 들어오는 값은 
일단 유효한 값으로 들어올 수 있다고 말할 수 있다.

</aside>

→→ 2️⃣ 참조는 소유하지 않은 메모리를가져올 수 없어 안전함

_

<aside> 💡 매개변수에 포인터를 사용하는 경우


[C++에서 포인터를 증가시키면?](https://cybecho.notion.site/C-1ad8b7a31a2e4a5792d02ef1693c9776)

다음 내용에서처럼, 함수의 매개변수로 포인터를 넣으면,

포인터 연산을 하여 매개변수로 넣었을 경우, 문제가 발생할 수 있다.

포인터는 사칙 연산이 가능하기 때문에

호출자가 swap()의 매개변수에

'number1에서 +1을 하고 그다음에 읽어올 거야!' 
ex) swap(*number + 1, *number2)

이런 짓을 해버릴 수 있다.
근데 이렇게 되면 내가 소유한 메모리 자체가 아니기 때문에 올바른 방법이 아님. 

즉, 포인터는 내가 소유하지 않은 메모리에 접근할 수 있는 위험성을 가지고 있는데 참조는 그럴 수 없다.

참조는 자신이 소유하지 않은 메모리를 가서 긁어올 수가 없게 되어있다.
그래서 참조를 쓰는 게 훨씬 안전한 이유인 것이다.

</aside>