길이가 2인 배열에서 첫번째와 두번째요소를 바꾸는 함수를 짜보자
이때 ref키워드를 쓰지않고 그냥 해보자
ref키워드를 사용하지않고 값에의한 전달을 하였는데 배열내부의 값이 변경되었다.
1. 참조 형식
이는 C#에서 배열이 참조형식 자료형 이기때문이다.
C#에서 데이터들은 값형식과 참조 형식이 존재한다.
C# 형식은 참조 형식과 값 형식 두 가지가 있습니다. 참조 형식의 변수에는 데이터(개체)에 대한 참조가 저장되며, 값 형식의 변수에는 해당 데이터가 직접 포함됩니다. 참조 형식에서는 두 가지 변수가 같은 개체를 참조할 수 있으므로 한 변수에 대한 작업이 다른 변수에서 참조하는 개체에 영향을 미칠 수 있습니다. 값 형식에서는 각 변수에 데이터의 자체 사본이 들어 있으며 한 변수의 작업이 다른 변수에 영향을 미칠 수 없습니다 -MSDN
참조형식자료형은 변수 그자체가 어떤 데이터에 대한 참조이고
값형식 자료형은 변수 그자체가 그 데이터값이다.
int는 값형식이다.
arr는 참조형식이다.
따라서 참조 형식인 arr을 넘기면
arr자체를 바꾸는(참조되는 데이터)것은 ref를 사용하지않으면 불가능하지만
이미 참조하고 있는데이터의 내부 값을 변경하는것은 가능하다. 즉
ref키워드가 없기때문에 ChangeArr의 첫번째 코드로 인하여
요기서
요렇게 main함수에 있는 arr이 참조하고있던 데이터의 값이 변경되었지만
2번째 코드로인하여
이렇게 되버리면
changeArr에서 아무리 값을 변경해도 main의 arr에 영향을 끼치지 않는다.
'교육 노트 > C# 강의' 카테고리의 다른 글
[C# 때려잡기] C# 강의 14.매개변수 (1) | 2018.10.04 |
---|---|
[C# 때려잡기] C# 강의 13. ref 와 out (0) | 2018.10.04 |
[C# 때려잡기] C# 강의 11. call by value / call by reference (2) | 2018.10.04 |
[C# 때려잡기] C# 강의 10. 메소드 오버로딩 (0) | 2018.10.04 |
[C# 때려잡기] C# 강의 9. 메소드 (함수) (0) | 2018.10.04 |