회원 로그인
|
참조 전달 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개(10/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
105 | [Python] zipfile 모듈 | 푸딩뱃살 | 4638 | 2015.09.15 10:17 |
104 | [PHP] array 배열 / sort 정렬 | 푸딩뱃살 | 3460 | 2015.09.02 21:11 |
103 | [PHP] function 함수 | 푸딩뱃살 | 2373 | 2015.08.14 22:28 |
102 | [PHP] while, do, foreach 반복문 | 푸딩뱃살 | 4998 | 2015.08.14 22:25 |
101 | [PHP] if ~ else 조건문 | 푸딩뱃살 | 2579 | 2015.08.14 22:13 |
100 | [PHP] PHP 기초 (에러,주석,변수,연산자) | 푸딩뱃살 | 3252 | 2015.07.08 00:43 |
99 | [C#] override와 new | 푸딩뱃살 | 3237 | 2015.05.14 01:34 |
98 | [C#] 다형성 | 푸딩뱃살 | 2586 | 2015.05.08 15:42 |
97 | [C#] 인터페이스 상속 | 푸딩뱃살 | 2647 | 2015.05.08 14:35 |
96 | [C#] 인터페이스 (Interface) | 푸딩뱃살 | 2578 | 2015.05.07 23:52 |
95 | [C#] 추상 클래스 | 푸딩뱃살 | 3303 | 2015.05.07 22:45 |
94 | [Python] 랜덤 패스워드 생성 | 푸딩뱃살 | 4289 | 2015.03.24 02:34 |
93 | [PHP] php 5.5.x로 업데이트로 인한 preg_replace() 오류 | 푸딩뱃살 | 2739 | 2015.03.14 02:15 |
92 | [PHP] php 5.5.x로 업데이트로 인한 mysql_connect() 오류 | 푸딩뱃살 | 6110 | 2015.03.14 02:01 |
91 | [PHP] PHP Warning: Cannot modity header information ~ PH | 푸딩뱃살 | 2790 | 2015.03.05 15:41 |
>> | [C#] 참조 전달 ref와 값 전달 out | 푸딩뱃살 | 6874 | 2015.02.26 00:10 |
89 | [VisualStudio] Visual Studio Express 2013 Windows Desktop 설치 | 푸딩뱃살 | 2993 | 2015.02.17 03:12 |
88 | [C#] 구조체 | 푸딩뱃살 | 3628 | 2015.01.07 14:17 |
87 | [C#] 오버라이드 (override) | 푸딩뱃살 | 4255 | 2014.11.21 02:17 |
86 | [C#] 이름의 은폐 new | 푸딩뱃살 | 3416 | 2014.11.21 02:13 |