What is Method?

[자료구조] 2. 스택(Stack)과 큐(Queue), 덱(Deque)

매개변수(메소드구조)의 중요성

public static void Swap(int a, int b)
{
    int temp = b;
    b = a;
    a = temp;
}

static void Main(string[] args)
{
    int x = 3;
    int y = 4;
 
    Swap(x, y); //여기서 함수 실행히우도 3,4값이 바뀌지는 않는다.
    //값을 복사해서(int a, int b)에 줬을뿐, 그 변수를 바꾸는건 아니다!
}

But, 이때, 원래의 값을 바꾸고 싶다면 어떻게 해야 할까?

A) 참조 변수(call by reference 를 써서 해결할 수 있음.

image.png

변수 타입 C# C C++
call by value (값을 변경) O O O
call by address(주소를 통해 변경) → 위험 X O O
call by reference (참조 변수로 변경) O X O

But, 참조 변수에 해당하는 놈이 아닌 다른 전역변수에 값을 담고 싶다면 어쩌지?

A) 그럴 때는 OUT변수를 쓰자!

void Divide( int a, int b, out int quotient, out int remainder )
{
    quotient = a / b;
    remainder = a % b;
}

int a = 20;
int b = 3;
int c;
int d;

Divide( a, b, out c, out d );
Console.WriteLine("Quotient : {0}, Remainder {1}", c, d );

int a = 3;
data_f(1231,321,a); <=> a = data_f(1231,321);

<aside> 💡

void f(int[] a) a[100] =100;

{

int [] X = new int [200]; → Heap에 메모리 할당하고 참조 변수 정의

f(x); → 값을 가져준 게 아니라, 참조 변수 X이므로 참조 변수를 준거임!

(참조 변수 주소는 8byte이므로 8byte 전달 해준 것이다!)

int y= X[100]; → 이때 값은 100 이 나올 것 이다.

}

</aside>

메소드 오버로딩

선택적 매개변수

void MyMethod( int a, int b = 0 ) 
//이런식으로 "= 몇" 을 추가하면 값을 안줘도 그 값을 default값으로 알아서 들어감.
{
    Console.WriteLine( “{0}, {1}”, a, b );
}
MyMethod(3);     // 매개변수 b 생략
MyMethod(3, 4);  

Struct vs Class

class Man
{
	~
}
Man a = new Man();
Man b = a;
	
Man b =a;를 하는 순간 참조변수값을 복사
이에 따라 class에 들어가져있는 값이랑
b에서 바꾸는 값이 동일하므로 동기화됨
struct Man
{
	~
}
Man a = new Man();
Man b = a;

이건 b가 a를 복사+참조변수까지
폼 그자체를 다 복사해서 가져옴

그러므로 b 를 바꾼다고 a가 바뀌지 않음