본문 바로가기
C#

C# 메서드 사용(2) - 매개변수전달:선언 기본형 변수, 참조형 변수

by 고체물리학 2021. 2. 17.

메서드 호출 시 변수 값을 전달하면 변수 내의 값을 복사해서 전달하게 됨

 

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);
        // => 주소값에 접근하여 값을 변경해서 원본 데이터에 영향이 있다
        
    }

}

반응형

댓글