회원 로그인
|
참조 전달 ref와 값 전달 out
참조 전달 ref와 값 전달 out
메소드의 인수를 통해 값을 전달하는 방법에는 값 전달과 참조 전달이 있다.
C#에서는 아무 것도 지정하지 않으면 값 전달이 된다. 값형이 차지하는 메모리를 메소드의 인수에 그대로 복사한다. 그래서 메소드의 안에서 인수를 변경해도 호출 원본의 인수는 처음 설정한 값이 된다.
메소드 안에서의 변경을 호출 원본에 반영하려면 값 전달이 아닌 참조 전달로 한다. 참조 전달은 값 자체가 아니라 참조 정보를 전달하기만 한다.
참조 전달을 하려면 메소드의 인수 앞에 ref를 붙여 사용한다. 또한 메소드 호출하는 인수에서도 ref를 붙인다.
ref를 사용할 때 메소드에 인수를 전달하기 전에 값이 대입되어 있어야 한다.
클래스는 참조형이므로 ref를 붙이지 않아도 참조형이 된다. 또한 참조형에서는 값 자체를 전달하지 않으므로(값 전달) 대량의 메모리를 사용할 때 구조체에서도 처리 속도나 메모리 소비가 적다.
호출 원본에 값을 반영하지 않을 경우 out을 사용할 수 있다. ref와 사용법이 같고 미리 값을 대입해야 한다.
참고> c#이 보이는 그림책
메소드의 인수를 통해 값을 전달하는 방법에는 값 전달과 참조 전달이 있다.
C#에서는 아무 것도 지정하지 않으면 값 전달이 된다. 값형이 차지하는 메모리를 메소드의 인수에 그대로 복사한다. 그래서 메소드의 안에서 인수를 변경해도 호출 원본의 인수는 처음 설정한 값이 된다.
class Program{ static void Test(int y) { y = 50; //메소드 안에서 y는 50 } static void Main(){ int x = 10; //x에 10을 대입 Test(x); Console.WriteLine(x); //x는 10 그대로 } } //결과 10
메소드 안에서의 변경을 호출 원본에 반영하려면 값 전달이 아닌 참조 전달로 한다. 참조 전달은 값 자체가 아니라 참조 정보를 전달하기만 한다.
참조 전달을 하려면 메소드의 인수 앞에 ref를 붙여 사용한다. 또한 메소드 호출하는 인수에서도 ref를 붙인다.
ref를 사용할 때 메소드에 인수를 전달하기 전에 값이 대입되어 있어야 한다.
class Program{ static void Test(ref int y) { y = 50; //메소드 안에서 y는 50 } static void Main(){ int x = 10; //x에 10을 대입 Test(ref x); Console.WriteLine(x); //x 값은 50 } } //결과 50
클래스는 참조형이므로 ref를 붙이지 않아도 참조형이 된다. 또한 참조형에서는 값 자체를 전달하지 않으므로(값 전달) 대량의 메모리를 사용할 때 구조체에서도 처리 속도나 메모리 소비가 적다.
호출 원본에 값을 반영하지 않을 경우 out을 사용할 수 있다. ref와 사용법이 같고 미리 값을 대입해야 한다.
class Program{ static void Test(out int y) { y = 50; //메소드 안에서 y는 50 } static void Main(){ int x = 10; //x에 10을 대입 Test(out x); Console.WriteLine(x); //x 값은 50 } } //결과 50
참고> c#이 보이는 그림책
댓글 0개
| 엮인글 0개
285개(1/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
285 | [Python] 동적 import - 모듈을 변수로 받아오기 | 푸딩뱃살 | 412 | 2022.10.27 10:45 |
284 | [Python] 파이썬 3.7.7과 3.9.7의 os.path.expanduser() 차이 | 푸딩뱃살 | 455 | 2022.08.18 12:22 |
283 | [Python] error: Microsoft Visual C++ 9.0 is required. | 푸딩뱃살 | 684 | 2022.08.03 13:35 |
282 | [Python] pyscript | 푸딩뱃살 | 452 | 2022.06.09 11:21 |
281 | [Python] float is / float not is | 푸딩뱃살 | 593 | 2022.03.02 15:03 |
280 | [Python] 이터널 문자열 f | 푸딩뱃살 | 833 | 2022.01.27 16:35 |
279 | [Python] is와 ==의 차이 | 푸딩뱃살 | 485 | 2021.11.25 15:54 |
278 |
[Python] Error: ImportError: file |
푸딩뱃살 | 916 | 2021.11.16 11:24 |
277 | [Python] 파이썬 디컴파일 - uncompyle6 | 푸딩뱃살 | 774 | 2021.11.10 14:46 |
276 | [Python] 파이썬 확장자 설명 | 푸딩뱃살 | 550 | 2021.11.03 14:38 |
275 | [참고] 웹 fbx 뷰어 | 푸딩뱃살 | 470 | 2021.10.19 15:46 |
274 | [Python] enumerate() | 푸딩뱃살 | 499 | 2021.10.13 14:44 |
273 | [Python] 아나콘다에서 가상 환경 | 푸딩뱃살 | 718 | 2020.11.21 00:26 |
272 | [Python] pip로 설치 때 퍼미션 에러 | 푸딩뱃살 | 1264 | 2020.06.06 17:13 |
271 | [Python] OpenCV 10-3. 이미지 Thresholding - Otsu's Binarizatio | 푸딩뱃살 | 673 | 2020.06.05 14:01 |
270 | [Python] OpenCV 10-2. 이미지 Thresholding - Adaptive Threshold | 푸딩뱃살 | 693 | 2020.06.05 13:58 |
269 | [Python] OpenCV 10-1. 이미지 Thresholding | 푸딩뱃살 | 578 | 2020.06.05 13:56 |
268 | [Python] OpenCV 9-2. 색 추적 | 푸딩뱃살 | 771 | 2020.06.02 23:29 |
267 | [Python] OpenCV 9-1. 색공간 바꾸기 | 푸딩뱃살 | 639 | 2020.06.02 23:27 |
266 | [Python] OpenCV 8-3. 이미지 비트 연산 | 푸딩뱃살 | 528 | 2020.06.02 23:21 |