메서드 호출 시 변수 값을 전달하면 변수 내의 값을 복사해서 전달하게 됨
1. 기본형 변수를 전달했을 경우(Pass by Value 방식 = 값에 의한 전달)
:변수 값(실제 데이터)을 복사하여 전달하므로, 메서드 내에서 값을 변경하더라도 원본 데이터에는 아무런 영향이 없다
:기본 데이터 타입 8가지를 전달하는 경우
2. 참조형 변수를 전달했을 경우(Pass by Reference 방식 = 참조(주소)에 의한 전달)
:변수 값(실제 데이터가 있는 곳의 주소 값)을 복사하여 전달하므로 메서드 내에서 주소 값에 접근하여 값을 변경하면 원본 데이터에 영향이 있다.
:기본 데이터 타입을 제외한 나머지를 전달하는 경우(배열, 인스턴스 등)
ex1) 기본형 변수
class VariableTest {
public void primitiveTypeMethod(int num) { // 기본형 변수의 복사된 값을 전달받음
num -= 3; // 복사된 값을 변경
Console.WriteLine("전달받은 변수 num 의 값 변경 시 : " + num);
}
}
public class Program {
static void Main(string[] args) {
VariableTest vt = new VariableTest();
int num = 5; // 기본형(Primitive Type) 변수
Console.WriteLine("메서드 호출 전 기본형 변수 num 의 값 : " + num);
vt.primitiveTypeMethod(num); // 메서드 호출 시 기본형 변수 값(실제 데이터) 복사해서 전달
Console.WriteLine("메서드 호출 후 기본형 변수 num 의 값 : " + num);
// => 메서드 내에서 전달받은 값을 변경하더라도 원본 데이터에는 아무런 영향이 없다
}
}
ex2) 참조형 변수
class VariableTest {
public void referenceTypeMethod(ReferenceVariable rv) { // 참조형 변수의 복사된 주소값 전달받음
rv.num -= 3; // 복사된 주소값에 접근하여 해당 변수값을 변경
Console.WriteLine("전달받은 주소값의 변수 num 의 값 변경 시 : " + rv.num);
}
}
class ReferenceVariable {
public int num = 5;
}
public class Program {
static void Main(string[] args) {
VariableTest vt = new VariableTest();
ReferenceVariable rv = new ReferenceVariable();
Console.WriteLine("메서드 호출 전 참조형 변수의 num 의 값 : " + rv.num);
vt.referenceTypeMethod(rv); // 참조변수 값(인스턴스의 주소값)을 복사하여 전달
Console.WriteLine("메서드 호출 후 참조형 변수의 num 의 값 : " + rv.num);
// => 주소값에 접근하여 값을 변경해서 원본 데이터에 영향이 있다
}
}
반응형
'C#' 카테고리의 다른 글
C# 기초 - 레퍼런스, 생성자 this (0) | 2021.05.15 |
---|---|
C# 메서드 사용(3) - 메서드 오버로딩(Method Overloading) (0) | 2021.02.21 |
C# 메서드 사용(1) - 인스턴스 변수, 로컬변수 선언 (0) | 2021.01.13 |
C# 메서드 정의(2) (1) | 2020.11.04 |
C# 메서드의 정의 (1) | 2020.11.01 |
댓글